SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建
=================
#### 1 . 这是基于SpringBoot和Shiro实现的一个角色权限访问控制(RBAC)的系统。
基本描述 :
1 . 一个用户具有一个角色,或者多个角色
2 . 一个角色具有一个权限,或者多个权限
3 . 权限可以访问对应的api,或者url资源等等。
基本实现 :
1 . 用户登入登出
2 . 基于权限控制访问api或者url资源。
#### 2 . 在你运行该应用之前 :
1. 请修改你自己的数据库配置: /application.yml
2. 请为这个例子测试准备基础数据: [shiro-rbac-system.sql](https://github.com/EalenXie/shiro-rbac-system/blob/master/src/main/resources/shiro-rbac-system.sql)
#### 3 . 相关测试 :
##### 1. 用户zhangsan(只有user权限),只能访问相关的api和页面 :
1. zhangsan进行登陆 :
![](https://img2018.cnblogs.com/blog/994599/201903/994599-20190328091643744-402886749.png)
2. 登陆成功,跳转到首页。
![](https://img2018.cnblogs.com/blog/994599/201903/994599-20190328091730165-1852880897.png)
3. zhangsan有进入add页面的权限。没有delete页面权限。访问 ``/add`` 则跳转到 新增页
![](https://img2018.cnblogs.com/blog/994599/201903/994599-20190328091843204-795382299.png)
访问 ``/delete``,因为没有权限会跳转到未授权页面。
![](https://img2018.cnblogs.com/blog/994599/201903/994599-20190328091934370-753707810.png)
4. zhangsan只能调用自己拥有角色和权限的api :
![](https://img2018.cnblogs.com/blog/994599/201903/994599-20190328094536849-2112103972.png)
![](https://img2018.cnblogs.com/blog/994599/201903/994599-20190328094635000-655674662.png)
没有相关角色和权限的api不能调用 :
![](https://img2018.cnblogs.com/blog/994599/201903/994599-20190328095220095-1501717577.png)
#### 5. 代码参考部分 :
1 . 加密参考 :
```java
/**
* Created by EalenXie on 2019/3/25 18:56.
*/
public class ShiroTest {
private Object encrypt(String username, String enablePassword) {
String hashAlgorithmName = "md5";//加密算法
String passwordSalt = "5371f568a45e5ab1f442c38e0932aef24447139b";//密钥
String salt = passwordSalt + username + passwordSalt; //盐值
int hashIterations = 1024; //散列次数
ByteSource credentialsSalt = ByteSource.Util.bytes(salt);//盐
return new SimpleHash(hashAlgorithmName, enablePassword, credentialsSalt, hashIterations);
}
/**
* 加密测试
*/
@Test
public void encryption() {
Object securePassword = encrypt("ealenxie", "admin");
System.out.println("ealen的加密后密码 : " + securePassword);
Assert.assertEquals("dde5deadfcaa4267804832b063f4f8f9", securePassword.toString());
Object zhangsanPassword = encrypt("zhangsan", "12345");
System.out.println("zhangsan的加密后密码 : " + zhangsanPassword);
Assert.assertEquals("3b574a9959cd4f8a9a3752d34e0f5f33", zhangsanPassword.toString());
Object lisiPassword = encrypt("3d1a32c2a11641b5551f1cbfc0a007e3", "12345");
System.out.println("lisi的加密后密码 : " + lisiPassword.toString());
}
}
```
2 . 数据库中权限,角色,url过滤器链核心配置参考 ,分别在`UserAuthRealm`和`ShiroConfig`中:
```java
/**
* 权限核心配置 根据数据库中的该用户 角色 和 权限
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo();
User user = (User) principals.getPrimaryPrincipal();
for (Role role : user.getRoles()) { //获取 角色
authorizationInfo.addRole(role.getName()); //添加 角色
for (Permission permission : role.getPermissions()) { //获取 权限
authorizationInfo.addStringPermission(permission.getName());//添加 权限
}
}
return authorizationInfo;
}
```
```java
/**
* 配置 拦截过滤器链. map的键 : 资源地址 ; map的值 : 所有默认Shiro过滤器实例名
* 默认Shiro过滤器实例 参考 : {@link org.apache.shiro.web.filter.mgt.DefaultFilter}
*/
private Map<String, String> setFilterChainDefinitionMap() {
Map<String, String> filterMap = new LinkedHashMap<>();
//注册 数据库中所有的权限 及其对应url
List<Permission> allPermission = permissionRepository.findAll();//数据库中查询所有权限
for (Permission p : allPermission) {
filterMap.put(p.getUrl(), "perms[" + p.getName() + "]"); //拦截器中注册所有的权限
}
filterMap.put("/static/**", "anon"); //公开访问的资源
filterMap.put("/open/api/**", "anon"); //公开接口地址
filterMap.put("/logout", "logout"); //配置登出页,shiro已经帮我们实现了跳转
filterMap.put("/**", "authc"); //所有资源都需要经过验证
return filterMap;
}
```
3 . 代码结构参考 : [https://github.com/EalenXie/springcloud-microservice-ddd](https://github.com/EalenXie/springcloud-microservice-ddd)
4 . 博客链接 : [https://www.cnblogs.com/ealenxie/p/10610741.html](https://www.cnblogs.com/ealenxie/p/10610741.html)
没有合适的资源?快使用搜索试试~ 我知道了~
SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建+源代码+文档说明
共34个文件
java:21个
html:6个
yml:1个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
5星 · 超过95%的资源 1 下载量 4 浏览量
2023-11-28
03:01:09
上传
评论
收藏 27KB ZIP 举报
温馨提示
SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 ================= #### 1 . 这是基于SpringBoot和Shiro实现的一个角色权限访问控制(RBAC)的系统。 基本描述 : 1 . 一个用户具有一个角色,或者多个角色 2 . 一个角色具有一个权限,或者多个权限 3 . 权限可以访问对应的api,或者url资源等等。 基本实现 : 1 . 用户登入登出 2 . 基于权限控制访问api或者url资源。 #### 2 . 在你运行该应用之前 : 1. 请修改你自己的数据库配置: /application.yml ## 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.md文件(如有),仅供学习参考, 切勿用于商业用途。
资源推荐
资源详情
资源评论
收起资源包目录
SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建.zip (34个子文件)
code
mvnw.cmd 6KB
pom.xml 3KB
src
test
java
name
ealen
ShiroTest.java 1KB
main
resources
templates
login.html 373B
unauthorized.html 155B
index.html 175B
authorization
delete.html 145B
update.html 145B
add.html 145B
shiro-rbac-system.sql 6KB
application.yml 747B
java
name
ealen
application
RBACService.java 615B
interfaces
web
LoginController.java 784B
AuthorizationController.java 718B
facade
LoginApiFacade.java 1KB
AuthorizationApiFacade.java 3KB
ShiroRbacSystemApplication.java 334B
infrastructure
utils
IpUtils.java 705B
TimeUtils.java 505B
advice
ControllerExceptionAdvice.java 4KB
config
ShiroConfig.java 4KB
UserAuthRealm.java 3KB
domain
dao
RoleRepository.java 291B
UserRepository.java 299B
PermissionRepository.java 315B
service
UserLoginApiService.java 1013B
entity
Permission.java 637B
BaseEntity.java 723B
Role.java 647B
User.java 702B
vo
Resp.java 376B
readme.md 5KB
mvnw 9KB
.gitignore 303B
共 34 条
- 1
资源评论
- 秃头披风侠12024-04-10发现一个宝藏资源,赶紧冲冲冲!支持大佬~
奋斗奋斗再奋斗的ajie
- 粉丝: 1211
- 资源: 2591
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- AllSort(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序,快速排序,归并排序)
- 模拟qsort,改造冒泡排序使其能排序任意数据类型,即日常练习
- 数组经典习题之顺序排序和二分查找和冒泡排序
- 基于 Oops Framework 提供的游戏项目开发模板,项目中提供了最新版本 Cocos Creator 3.x 插件与游戏资源初始化通用逻辑
- live-ai这是一个深度学习的资料
- FeiQ.rar 局域网内通信服务软件
- 172.16.100.195
- 光储并网simulink仿真模型,直流微电网 光伏系统采用扰动观察法是实现mppt控制,储能可由单独蓄电池构成,也可由蓄电池和超级电容构成的混合储能系统,并采用lpf进行功率分配 并网采用pq控制
- python编写微信读取smart200plc的数据发送给微信联系人
- 光储并网VSG系统Matlab simulink仿真模型,附参考文献 系统前级直流部分包括光伏阵列、变器、储能系统和双向dcdc变器,后级交流子系统包括逆变器LC滤波器,交流负载 光储并网VSG系
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功