在做权限的时候要注意
(一),显示控制,
文件夹,页面根据用户登录是的权限渲染(登录时即可,看怎么整合)
另一方面:页面---权限控制访问 ,
按钮 所有的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>
相关推荐
《“知识四层次”视角下的深度学习与思维发展——以九年级“酸的通性”教学为例》这篇文章探讨了在教育领域中如何运用深度学习理论,以促进学生的思维发展。作者祝钱通过分析化学知识的四层次——事实性知识、概念性...
非电解质稀溶液的通性与电解质溶液.pptx
相比于一连通性,四连通性提供了更强的网络冗余,对于关键任务和实时应用尤为重要。然而,实现四连通性通常会增加部署的复杂性和成本,因此寻找在rc/rs变化下的最优部署模式显得至关重要。 该工作的贡献在于首次...
本课程主要探讨了安全体系结构的概念、内容、设计原则,并以Flask体系结构为例,介绍了如何实现灵活和安全的操作系统。 首先,安全体系结构的含义包括详细描述系统中的所有安全相关方面,明确各安全模块间的关系,...
策略可变通性的关键在于将系统视为状态机,通过原子操作在不同状态间转换,并将安全策略融入操作执行中。为了支持策略的可变通性,系统需要具备撤回权限的能力,考虑决策所需的输入类型、外部因素以及访问决策的传递...
为了支持策略的可变通性,系统需要具备撤回权限、提供访问决策所需输入、考虑外部影响因素以及支持访问决策传递性等机制。策略改变时,必须确保这些机制的协调和同步,以防止安全漏洞的出现。 综上所述,操作系统...
高一化学碱通性PPT学习教案.pptx
数字电路作为电子技术中的基础组成部分,其逻辑设计对现代电子控制系统有着至关重要的作用。数字电路设计的基本方法包括使用逻辑门、触发器等基本元件来构建复杂的逻辑功能,其中经常涉及的主要有组合逻辑电路和时序...
份简称为X) 可在许多系统上执行. 由於它和生产者无关、具可携性、对彩 色掌握的多样性及对网路之间的操作透通性 (operate transparently), 使 得X成为一个工业的标准. 由於原始程式可自由使用, 所以它也是一个...
在实验室中,浓盐酸常用于除锈和消化系统的辅助作用。 2. 浓硫酸的特性: - **浓硫酸**:无色粘稠油状液体,有吸水性(作为干燥剂)、脱水性和强氧化性。稀释时应将浓硫酸慢慢倒入水中,并不断搅拌以防局部过热。...
《硫酸与酸的通性——九年级科学导学案》 本导学案主要围绕九年级科学上册第一章节“物质及其变化”的第三个主题“常见的酸”,第二课时聚焦硫酸与酸的共性展开。这一部分的学习建立在学生对盐酸性质理解的基础上,...
【高一化学金属通性】知识点详解 金属是化学元素中的一个重要类别,具有独特的化学性质。在高中化学中,金属通性是基础教学内容之一,它涵盖了金属与氧气、水、酸以及盐溶液的反应,同时也包括金属氧化物的性质以及...
总结来说,这个课件详细讲解了酸的分类、命名、化学性质以及相关实验,旨在帮助学生系统地学习酸的通性,并通过实践加深理解。通过这样的教学方式,学生可以更好地掌握化学中的重要概念,为后续的化学学习打下坚实的...
"高一化学金属通性3PPT学习教案" 本资源是高一化学金属通性学习教案,共19页,涵盖了多个知识点,以下是对应的知识点说明: 1.化学实验方法:资源中提到检验生石灰里含有石英和石灰石的方法。 2.硅的性质:资源中...
这篇资料主要涉及初中化学中关于碱的通性的知识点。碱的通性是化学学习中的一个重要概念,主要包括碱的定义、性质以及与酸的反应等。 首先,碱通常指的是在水溶液中能电离出氢氧根离子(OH⁻)的化合物。在题目中,...
粤教九年级化学下册酸的通性PPT学习教案.pptx
【高二化学金属通性和镁铝性质】\n\n金属是化学中一类重要的元素,它们在日常生活和工业生产中有着广泛的应用。金属晶体由金属阳离子和自由电子构成,自由电子能够在整个晶体中自由移动,这是金属良好导电性的基础。...
本文以某综合体育馆为例,深入探讨了智能照明控制系统的技术特点和施工工艺流程。 首先,工程概况中提到,该体育馆建筑面积为12034平方米,建筑高度26米,采用钢筋混凝土框架剪力墙结构。电气工程设计涵盖了智能...
以丰田花冠汽车为例,其手动空调电路包括电源电路、压缩机控制、散热风扇电路和鼓风机控制电路等。在故障诊断和排除过程中,我们需要检查各个开关和电路的导通性,确保电流能够正确流动,例如鼓风机开关在不同档位时...
- 硫酸和氯化钡反应生成BaSO4沉淀,反应类型也为复分解反应,现象同样为白色沉淀,化学方程式为H2SO4 + BaCl2 → BaSO4↓ + 2HCl。 - 不溶于稀硝酸的白色沉淀有AgCl和BaSO4。 4. 逻辑推理: - A选项错误,因为...