shiro实现基于角色的权限授权
来源:互联网 发布:vs2015怎么编译c语言 编辑:程序博客网 时间:2024/05/17 01:47
shiro除了登陆验证之外,还有一点就是对系统进行相应的权限操作,而基于角色的授权是目前最通用的做法,也是符合业务逻辑的。具体思路如下:
1.数据库设计好权限表,角色表(权限标识是自定义的,shiro会根据表格里面相应的权限对系统做出管理)
2.将权限表与角色表做外键关联(多对一),用户表与角色表做外键关联
3.在自定义的Realm里实现授权
4.在controller层的方法里加上对应权限(推荐使用注解,只是需要在配置文件中开启注解,这点自行百度,并无什么难点)
开启shiro注解的配置如下:
<!--配置lifecycleBeanPostProcessor, 可以自动的来调用配置在spring IOC 容器中shiro bean的生命周期方法--> <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor" /> <!--启用IOC容器中使用shiro的注解,但必须在配置 lifecycleBeanPostProcessor才可以使用–>--> <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator" depends-on="lifecycleBeanPostProcessor"> <property name="proxyTargetClass" value="true" /> </bean> <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor"> <property name="securityManager" ref="securityManager"/> </bean> <!--扫描所有shiro注解的文件--> <context:component-scan base-package="action"> <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
对数据库的建表等操作就不给出来了,这点需要自己实现,下面就是授权代码:
大体流程是:先从数据中查找出该用户的对应角色,然后通过角色找出对应的权限,然后再通过add方法设置角色和权限
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {// System.out.println("授权"); SimpleAuthorizationInfo info=new SimpleAuthorizationInfo(); List<String> permissions=new ArrayList<>(); List<String> roles=new ArrayList<>(); String username= (String) principalCollection.getPrimaryPrincipal();// System.out.println("username"+username); croUser=croUserService.findUserByName(username); List<CroRoleRoot> croRoleRoots=croRoleRootService.FindRootByRoleId(croUser.getCroRole().getId()); for(CroRoleRoot croRoleRoot:croRoleRoots){ String permission=croRootService.FindRootById(croRoleRoot.getCroRoot().getId()).getRoot();// System.out.println("权限:"+permission); permissions.add(permission); } roles.add(croUser.getCroRole().getRolename()); info.addRoles(roles);//设置角色 info.addStringPermissions(permissions);//设置权限 return info; }
@RequiresPermissions("user:select")//对应权限注解 public String listCoupons(){ upcroCoupons=croCouponsService.FindCouponsByid(id); return "updatecoupons"; }
接着就可以进行测试操作了,当无权限的时候,会抛出一个无权限异常,用户的操作不会有任何效果。
注:注解只是其中一种方式,还有直接使用if-else判断和shiro标签的方式。建议学习shiro的程序猿去看看注解和shiro方式,并且这两种方式可以一起用,达到自己所设想的效果。
阅读全文
3 1
- shiro实现基于角色的权限授权
- 基于shiro的权限管理-002授权
- Shiro在web的授权检测(权限角色验证)
- Apache Shiro 基于权限授权
- 框架 day54 BOS项目练习(权限/角色/用户管理(CRUD),基于数据库实现动态授权,ehcache缓存权限,shiro标签,菜单权限展示)
- BOS项目练习(权限/角色/用户管理(CRUD),基于数据库实现动态授权,ehcache缓存权限,shiro标签,菜单权限展示)
- 将 Shiro 作为应用的权限基础 三:基于注解实现的授权认证过程
- 将 Shiro 作为应用的权限基础 三:基于注解实现的授权认证过程
- springboot+shiro+mybatis实现角色权限控制
- 【权限管理】基于shiro的权限管理开发实现
- 【权限管理】基于shiro的权限管理开发实现
- 基于AOP实现权限管理:通过shiro认证身份和模拟授权认证
- 基于AOP实现权限管理:通过shiro认证身份和模拟授权认证
- Shiro简单的角色权限控制
- Shiro的权限、角色、用户管理
- shiro学习之路(4)------角色认证授权,权限认证授权
- Maven搭建Struts2+Hibernate4+Spring4+Shiro(安全篇)之子项目(基于角色,权限的访问控制)
- Shiro 学习笔记(4)—— 基于字符串的角色和权限
- 剑指offer:第20题顺时针打印矩阵;
- url中包含#字符等特殊字符导致请求报错的解决方案
- javaWeb中BaseServlet的实现
- FZU 2234 牧场物语【Dp】好题!好题!
- jqueryMobile select表单
- shiro实现基于角色的权限授权
- win打开资源管理器快捷键(查看内存的占用)
- 导出CSDN文章,并转成Hexo要求的样式,博客迁移
- Android绘图,Canvas学习笔记
- python爬虫(豆瓣影评)
- Warning: unable to open an initial console.
- Codeforces 812
- 五大常用算法:分治、动态规划、贪心、回溯、分支限界
- myeclipse2017ci5正确破解的方法