权限系统普遍通性,以shrio为例
来源:互联网 发布:mac netbeans tomcat 编辑:程序博客网 时间:2024/05/16 06:31
在做权限的时候要注意
(一),显示控制,
文件夹,页面根据用户登录是的权限渲染(登录时即可,看怎么整合)
另一方面:页面---权限控制访问 ,
按钮 所有的controller继承一个抽抽象的父的controller,这里每次都查出用户的按钮权限,页面用EL标签判断 决定是否显示出来,同时权限控制(防止直接点击连接)
显示控制(文件夹到按钮) 抽象父类用一个方法查询当前角色,菜单的按钮,跳转到list的时候调用,至于页面文件夹的显示只要在登录成功的时候查出set即可
(二),访问控制(页面,按钮),权限配置
请求---url受控---获取是否要求登录,要求角色,要求权限,后面进入校验的时候就不带url了,之后用带有的要求去调用相应的方法
比如,认证,授权(这里也是直接匹配带过来的角色权限要求)
1,用户验证
2,组织用户的角色,权限
3,配置系统所有用户角色权限(这里的就是受保护的)
4,shrio自动两个匹配放行
5, 访问一个资源,先检是否受控(3)(只要受控那么他需要的role,permission就自动根据3带到后面),如果受控再通过1,然后2,到了4的时候会把2和这个访问url带过来的
role,permission匹配决定是否放行,security也是如此,url不在系统初始化的权限列表中如(3),就不会受到权限系统的拦截
即只有访问的资源在3中shrio才会拦截,每拦截一次都会重新加载当前用户的角色,再去对比
登录登出
组装好token,info,之后再验证
授权
AuthorizingRealm
getAuthorizationInfo
在每次访问的时候shrio过滤器会自动执行,1,
5, 访问一个资源,先检是否受控(3)(只要受控那么他需要的role,permission就自动根据3带到后面),如果受控再通过1,然后2,到了4的时候会把2和这个访问url带过来的
role,permission匹配决定是否放行,security也是如此
启动的时候当然要加载全部的url,角色信息
authc,roles,perms(分别对应1,及2中的addROle,addPermiss())表示需要通过这些检验
simpleAuthorInfo.addRole("admin");// 添加一个角色,证明该用户拥有admin角色 相当于roles[admin]----roles默认的过滤器
simpleAuthorInfo.addStringPermission("admin:manage");// 添加权限 相当于 perms[admin:manage],":"表示哪个权限下的----perms默认的过滤器
simpleAuthorInfo.addRoles(roleList);// 给当前用户设置角色 相当于 roles[,,,,]
simpleAuthorInfo.addStringPermissions(permissionList);// 给当前用户设置权限 oper
用任何权限框架
1,用他自带的提交url(form)---此时只要登录的表单的字段名和规范一致就可框架自动获取对比
2,用自己的提交url(form),那么里面用到权限框架的部分需要在这个登陆方法里传入了参数
3,用框架需要自定义的时候可以参照已有的写比如:RolesAuthorizationFilter//这个是roles[,,]中所有参数符合才放行,我们如果需要只要符合一个就放行可以重写一个
实现如下 http://blog.csdn.net/ikaraide/article/details/37928389
需要注意的是shrio的资源是url,因为在请求的时候shrio就是拿这个请求的url和我们初次加载的资源map比对(这个url是剔除参数的,所以除了edit(增加,修改)的url都要不同名称,一般会不同
,因为有模块名和操作名(比如Springmvc风格的路劲))
在访问上页面个按钮都当着同等级别的资源,直接由角色控制能不能访问,因为我们用户有了角色之后就有了页面,按钮的访问信息
perms是在角色下,更细小的控制
注意:
1,登出调用框架登出的方法(清除信息,不可公用登录的方法)
2,登录页面只会检验authc,后面加其他的(角色,权限)也没用,不会执行
3,自己要做过滤器比如,只要满足一个角色即可访问的,参照系统的RolesAuthorizationFilter(系统默认用的是这个,要所有角色参数满足才可访问)
4, 整个资源--权限列表的重加载问题(为了修改后不必重启,这里只要看源码中如何调用这个方法即可)
shrio动态更行权限
http://zgzty.blog.163.com/blog/static/83831226201361134047834/
<!-- 读取自定义权限内容-->
<propertyname="filterChainDefinitions"value="#{authService.loadFilterChainDefinitions()}"/> 这种是按照原始的文本格式
http://blog.csdn.net/eggtk/article/details/38255871
http://blog.csdn.net/z971829916/article/details/22572587 这种是按照map的方式组织
动态创建filterchaindefinitions,这个好
可能会用到的格式化文本技巧:
public static final String PREMISSION_STRING="perms[\"{0}\"]";
String q=MessageFormat.format(PREMISSION_STRING, "q");
perms["q"]
AuthenticationRealm只要配置了shrio就是走这个
至于是不是正的拦击,看这个资源没有没有要求AuthenticationFilter看这个url资源没有配置
/admin/** = anon不必登录
/main**=authc 登录成功才可
/ui/info**=authc
/ui/listUser**=authc,perms[admin:manage] 登录成功才可,而且符合perms这个拦截器的admin角色
上面有一条匹配则不往下
<property name="filters">
<map>
<entry key="authc" value-ref="authenticationFilter" />
</map>
</property>
//权限规则
http://www.cppblog.com/guojingjia2006/archive/2014/05/14/206956.html这里是配置权限规则和默认的过滤器
比如perms就是默认过滤器
FormAuthenticationFilter authc也是默认的过滤器可以重写,传递项目特有的参数
@see 4)举几个例子
* @see /admin=authc,roles[admin](角色) 表示用户必需已通过认证,并拥有admin角色才可以正常发起'/admin'请求
* @see /edit=authc,perms[admin:edit](权限) 表示用户必需已通过认证,并拥有admin:edit权限才可以正常发起'/edit'请求
* @see /home=user 表示用户不一定需要已经通过认证,只需要曾经被Shiro记住过登录状态就可以正常发起'/home'请求
@see /admins/user/**=ssl 无参,表示安全的URL请求,协议为https////////////////shrio和security比他可以指定哪些需要http,哪些需要https,类似的还可以指定端口
* @see 参数可写多个,多个时必须加上引号,且参数之间用逗号分割,如/admins/user/**=roles["admin,guest"]m
* @see 当有多个参数时必须每个参数都通过才算通过,相当于hasAllRoles()方法
* @see 参数可写多个,多参时必须加上引号,且参数之间用逗号分割,如/admins/user/**=perms["user:add:*,user:modify:*"]
* @see 当有多个参数时必须每个参数都通过才算通过,相当于isPermitedAll()方法
2. 使用shiro提供的logout filter,///////////////////////////其他的过滤器不必申明,就是这个默认的过滤器需要声明
需要定义 相应的bean
<bean id="logout" class="org.apache.shiro.web.filter.authc.LogoutFilter">
<property name="redirectUrl" value="/loginform" />
</bean>
然后将相应的url filter配置为logout如下
<property name="filterChainDefinitions">
<value>
# some example chain definitions:
/index.htm = anon
/logout = logout
/unauthed = anon
/console/** = anon
/css/** = anon
/js/** = anon
/lib/** = anon
/admin/** = authc, roles[admin]
/docs/** = authc, perms[document:read]
/** = authc
# more URL-to-FilterChain definitions here
</value>
- 权限系统普遍通性,以shrio为例
- Android系统中如何添加权限-----以TP为例
- 以调用系统相机拍照为例了解Android 6.0运行时权限
- 权限管理说明-以Linux为例
- Shrio权限管理框架
- Android 申请运行时权限 以camera为例
- 以sethostname()系统调用为例学习系统调用
- 以Android L读取系统所有logcat并写入文件为例分析Android 添加系统服务,通过系统服务申请selinux的权限执行shell脚本,以及avc:dined应该怎么申请权限
- shrio
- Shrio
- android 权限(二)给基本组件自定义权限(以activity为例)
- shrio 权限管理filterChainDefinitions过滤器配置
- shrio 权限管理filterChainDefinitions过滤器配置
- shrio 权限管理filterChainDefinitions过滤器配置
- shrio 权限管理filterChainDefinitions过滤器配置
- shrio 权限管理filterChainDefinitions过滤器配置
- shrio 权限管理filterChainDefinitions过滤器配置
- shrio 权限管理filterChainDefinitions过滤器配置
- arcgis_js入门示例一
- 程序流程设计
- 二、递归简论-算法
- 视图 索引 序列 触发器 存储过程
- java直接跳出上层循环(多层循环)
- 权限系统普遍通性,以shrio为例
- 最新版Intellij IDEA插件JRebel 7.0.7安装与激活教程。
- 浏览器渲染ajax动态拼接元素样式失效问
- C#控制台程序,Winform,WPF的区别
- sql迭代 因为parentid is null 要有parentid为null的记录
- 有条件的debug断点
- spring mvc 扫描注解(ioc,di)
- SetWindowPos
- src与href区别