shiro-03shiro的filterChainDefinitions
来源:互联网 发布:linux cpu 超过100 编辑:程序博客网 时间:2024/05/29 18:57
注:
有关shiro的内容全部围绕springrain项目讲解, 具体springrain项目demo可以在之前的博客中下载.
springrain使用shiro控制权限,配置filterChainDefinitions结合数据库校验权限.
shiro在web.xml中配置全局过滤器,springrain配置的是一个spring bean “shiroFilter”,在这个bean中可以根据访问路径再配置不同的过滤器,shiro 默认自带的过滤器如下:
Filter Name Class
anon org.apache.shiro.web.filter.authc.AnonymousFilter
authc org.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasic org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
logout org.apache.shiro.web.filter.authc.LogoutFilter
noSessionCreation org.apache.shiro.web.filter.session.NoSessionCreationFilter
perms org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
port org.apache.shiro.web.filter.authz.PortFilter
rest org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
roles org.apache.shiro.web.filter.authz.RolesAuthorizationFilter
ssl org.apache.shiro.web.filter.authz.SslFilter
user org.apache.shiro.web.filter.authc.UserFilter
我们平常用的就是 anon:任何人都可以访问;authc:必须登录才能访问,不包含rememberme ;user:登录用户才可以访问,包含rememberme ;perms:指定过滤规则,这个一般是扩展使用,不会使用原生的,例如springrain扩展的为frameperms.
filterChainDefinitions 就是指定过滤规则的,一般是把公共配置使用配置文件,例如 js css img 这些资源文件是不拦截的,业务相关的url配置到数据库,有过滤器查询数据库进行权限判断.
不要想着把所有的url都配置到配置文件,这是一个误区!
springrain的配置如下图:
拦截器的优先级是:从上至下,从左到右,如果有匹配的拦截器就会阻断并返回,例如 访问 /js/abc.js 第一个拦截器 anon符合,就返回true了,不再往下匹配了.
最后一句是 /**=user,frameperms 意思就是除了上面的那些,其他的所有都要经过 user和frameperms.如果没有登陆 user就会阻断,不会执行到frameperms.
frameperms 就是我们自定义实现的过滤器,从数据库中查询用户的权限,判断当前用户是否有权限访问拦截的url.
具体拦截的工作流程是怎么样的呢?
第一步:认证和授权的 realm.例如springrain扩展的shiroDbRealm,在doGetAuthorizationInfo授权方法里
// 添加角色及权限信息 SimpleAuthorizationInfo sazi = new SimpleAuthorizationInfo(); try { sazi.addRoles(userRoleMenuService.getRolesAsString(userId)); sazi.addStringPermissions(userRoleMenuService.getPermissionsAsString(userId)); } catch (Exception e) { logger.error(e); } return sazi;
sazi.addRoles:获取当前用户所有的角色,用于依据角色判断权限的shiro过滤器,springrain中没有使用
sazi.addStringPermissions:获取当前用户的所有权限,springrain中的权限就是url,所以在springrain中这就是一个url的集合.
我们的拦截器每次校验权限都会调用doGetAuthorizationInfo,获取当前用户的所有权限.
我们的权限拦截器 只要判断当前用户访问的url是否在他的权限集合内就可以了,例如 springrain中frameperms 的校验url权限:
//会调用realm的doGetAuthorizationInfo授权方法permitted= subject.isPermitted(uri);
这个基本就是权限校验的流程
出自weicms.net
永久链接: http://www.weicms.net/2013/12/12/springrain3-shiro-filter.html
- shiro-03shiro的filterChainDefinitions
- Shiro配置filterChainDefinitions
- shiro之filterChainDefinitions
- shiro 中的filterChainDefinitions详解
- shiro配置filterchaindefinitions实现多角色判定方法的重写
- Shiro 权限管理filterChainDefinitions过滤器配置
- SpringMVC整合Shiro与filterChainDefinitions过滤器配置
- Shiro 权限管理filterChainDefinitions过滤器配置
- Shiro 权限管理filterChainDefinitions过滤器配置
- Shiro 权限管理filterChainDefinitions过滤器配置
- apache shiro与spring整合、动态filterChainDefinitions、以及认证、授权
- apache shiro与spring整合、动态filterChainDefinitions、以及认证、授权
- apache shiro与spring整合、动态filterChainDefinitions、以及认证、授权
- apache shiro与spring整合、动态filterChainDefinitions、以及认证、授权
- apache shiro与spring整合、动态filterChainDefinitions、以及认证、授权
- apache shiro与spring整合、动态filterChainDefinitions、以及认证、授权
- shiro
- shiro
- CSR 蓝牙读写
- UI5开发 – 发布到Fiori LaunchPad以及调试
- 单向循环链表的实现
- js中创建元素createElement\createTextNode\appendChild
- MATLAB中生成随机数方法总结
- shiro-03shiro的filterChainDefinitions
- UI5开发 – 解决Fiori LaunchPad不能加载Google API问题
- 打印_battery_status.scale
- 进程控制编程
- Java之Thread总结
- 无刷无霍尔BLCD电机控制
- 计算机网络系列(7)之应用场景Search engine
- 【拓扑+堆】BZOJ4010(HNOI2015)[菜肴制作]题解
- Android面试题