Shiro整合SSH开发4:Realm授权,perms过滤器测试和使用方法讲述
来源:互联网 发布:配电网数据采集与监控 编辑:程序博客网 时间:2024/04/30 14:21
使用:org.apache.shiro.web.filter.authz.RolesAuthorizationFilter进行授权拦截
本文还是使用静态的验证方式,将在以后一步步进行数据库查询认证信息和授权信息,不过,为了方便大家一步步学习和查看,还是先从静态的方式开始吧。
perms(许可验证)
org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。
/admins/user/**=perms[user:add:*]表示:要访问【/admins/user/**】必须具有【user:add:* 】权限
此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/51226800
更多有关老猫的文章:http://blog.csdn.net/nthack5730
在application-shiro.xml中配置URL所需要的权限:
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/user/login.action" /> <!-- 没有权限或者失败后跳转的页面 -->
<property name="filterChainDefinitions">
<!-- , roles[admin], perms[document:read] -->
<value>
<!-- 对静态资源设置匿名访问 -->
/js/** = anon
/css/** = anon
/img/** = anon
/fonts/** = anon
/scripts/** = anon
/user/login.action = authc
/user/logout = logout
<!-- 进入后台需要权限:admin:* -->
/backstage/** = perms[admin:*]
/user/** = user
</value>
</property>
</bean>
在Struts2中加入上面Shiro中过滤链的对应的链接的Action:
【Action可以不用配置处理方法的,这个大家应该都知道吧?】
<!-- 后台 -->
<package name="backstage" namespace="/backstage" extends="struts-default">
<default-action-ref name="index" />
<action name="index">
<result>/WEB-INF/jsp/backstage/index.jsp</result>
</action>
</package>
自定义Realm的授权doGetAuthorizationInfo方法:
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
//从principals获取主身份信息
//将getPrimaryPrincipal()返回的值强制转换为真实身份信息【在上边的doGetAuthenticationInfo()认证通过填充到SimpleAuthenticationInfo中的身份信息】
String userCode = (String) principals.getPrimaryPrincipal();
//根据身份信息获取权限信息
//先链接数据库。。。
//模拟从数据库获取数据
List<String> permissions = new ArrayList<String>();
permissions.add("admin:*");//用户的创建权限
permissions.add("user:update");//用户的修改
permissions.add("item:add");//商品的添加权限
//....等等权限
//查到权限数据,返回
SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
//将List里面的权限填充进去
simpleAuthorizationInfo.addStringPermissions(permissions);
return simpleAuthorizationInfo;
}
此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/51226800
更多有关老猫的文章:http://blog.csdn.net/nthack5730
在上面的代码中,主要加入权限的是:
【以后这里的权限数据是从数据库中查回来的,测试的时候为了更加直观,所以就直接用了静态写死的方式展示给大家看。】
List<String> permissions = new ArrayList<String>();
permissions.add("admin:*");//用户的创建权限
permissions.add("user:update");//用户的修改
permissions.add("item:add");//商品的添加权限
//....等等权限
权限部分添加后,通过addStringPermissions方法将这个collection交给授权管理器进行权限的判断。
//将List里面的权限填充进去
simpleAuthorizationInfo.addStringPermissions(permissions);
测试流程:
1、在application-shiro.xml配置过滤的规则
<!-- 进入后台需要权限:admin:* -->
/backstage/** = perms[admin:*]
2、用户在认证通过后,请求【/backstage/**】即backstage命名空间中任意地址
被PermissionsAuthorizationFilter拦截,发现需要【admin:*】权限
3、PermissionsAuthorizationFilter调用Realm中的doGetAuthorizationInfo方法来获取数据库中正确的权限
4、PermissionsAuthorizationFilter对需要的权限【admin:*】和获取的权限进行对比,如果【admin:*】在realm返回的权限列表中,则授权通过,否则没有权限。在没有权限的时候,我们就用下面对没有权限的操作进行页面跳转。
此文老猫原创,转载请加本文连接:http://blog.csdn.net/nthack5730/article/details/51226800
更多有关老猫的文章:http://blog.csdn.net/nthack5730
配置没有权限(授权失败)页面:
在使用Struts2时候,如果没有访问权限,就会报Status 401错误,毕竟401这个很不友好,那么我们通过加入没有权限访问页面,就可以防止出现401这个不友好的界面的问题。
需要在spring配置文件中,【shiroFilter】的bean中加入如下配置:
<!-- 通过unauthorizedUrl指定没有权限操作时跳转页面-->
<property name="unauthorizedUrl" value="/refuse.jsp" />
存在的问题总结:
在applicationContext-shiro.xml中配置过滤器链,需要将全部的URl和权限对应起来进行配置,这种配置方式是比较麻烦的,不方便使用。
每次授权,都需要调用realm查询数据库,对于系统的性能具有很大的影响。设想:以后通过shiro的缓存来解决。
之后会一一处理这些问题。
2 0
- Shiro整合SSH开发4:Realm授权,perms过滤器测试和使用方法讲述
- shiro第二天 shiro授权 shiro和企业项目整合开发
- shiro-realm授权过虑器
- spring整合shiro认证和授权
- Shiro入门10:自定义Realm进行授权
- Shiro多个Realm认证及授权
- springMvc和shiro整合,shiro的realm不能自动注入的问题
- springMvc和shiro整合,shiro的realm不能自动注入的问题
- ssm和shiro整合,shiro的自定义的realm不能自动注入的问题
- Shiro整合SSH开发2:结合Struts2实现登陆和退出以及Shiro执行流程和原理解析
- Shiro初步4_基于过滤器链的授权操作
- Shiro学习(6)Realm整合
- Shiro学习(6)Realm整合
- Shiro整合SSH开发1:整合Shiro+Struts2+Spring+Hibernate 初步整合配置【基于Maven】
- Shiro整合Spring实现登录验证和授权之入门
- Shiro与SSH整合
- SSH整合shiro
- SpringMvc+MyBatis+Shiro整合,shiro的realm不能注入Bean
- java 动态规划判断股票最大盈利问题
- 274. H-Index
- 指针数组和数组指针的区别
- hadoop学习序曲之java基础篇--java多线程
- PART 2: 使 Shell 能读取命令
- Shiro整合SSH开发4:Realm授权,perms过滤器测试和使用方法讲述
- Android Volley详细解析(一):Volley基本用法
- swift 网络请求&json解析
- 修改Ubuntu中locale转中文为英文
- OSG学习笔记5—使用开关节点
- Mac电脑快捷键
- Ubuntu 16.04安装和配置Sublime Text 3
- Memcache工作原理
- 8项目1