快速业务通道

Spring Security 2 中动态角色权限的实现 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

Spring Security 2 中动态角色权限的实现

时间:2011-06-01 BlogJava 杨一

安全框架的主体包括两部分即验权和授权。Spring Security2可以很好的实 现这两个过程。Spring Security2对其前身acegi最大的改进是提供了自定义的 配置标签,通过Security的命名空间定义了http和authentication-provider等 标签,这样做的好处是极大地简化了框架的配置,并很好地隐藏了框架实现的细 节,在配置的表述上也更清晰,总体上提高了框架的易用性。

然而,该框架默认的权限配置方式在xml中,又因为新版本隐藏了实现细节, 在动态权限的扩展上,能力变小了。在验权过程中,遇到的问题不多。但在授权 时,如果是acegi,人们可以通过继承 AbstractFilterInvocationDefinitionSource类实现在授权(即资源角色和用户 角色的匹配)前,针对资源的角色的获取。而新版本因为用新标签进行了整合, 这个过程被默认的类实现隐藏掉了,包括过滤器,资源获取和角色定义等过程都 由框架来实现,于是很多人在使用Spring Security2时也想通过改动 DefaultFilterInvocationDefinitionSource对资源的获取来实现数据库或文件 中的动态的角色。不过这样的改动侵入性比较高,而且还保留了acegi的痕迹, 也违背了开闭的原则。

其实,我们完全可以通过Spring Security2 accessManager提供的自定义投 票机制来解决这个问题,这样既不影响现有的基于URL的配置,还可以加入自己 的动态的权限配置。

其实现策略如下:

1 定义类DynamicRoleVoter实现AccessDecisionVoter,注入实现接口 DynamicRoleProvider(用来定义获取角色的方法)的提供动态角色的类

2 在两个supports方法中返回true

3 在vote方法中,有三个参数(Authentication authentication, Object object,

ConfigAttributeDefinition config) 通过第一个获取用户的权限集合,第 二个可以获取到资源对象,进而通过DynamicRoleProvider获取到角色集合进行 匹配。

4 在配置文件中加入DynamicRoleVoter,如下:

<beans:bean id="accessDecisionManager" class="org.springframework.security.vote.AffirmativeBased"&g t; <beans:property name="decisionVoters"> <beans:list> <beans:bean class="org.springframework.security.vote.RoleVoter" /> <beans:bean class="org.springframework.security.vote.AuthenticatedVoter" /> <beans:bean class="DynamicRoleVoter">     <beans:property name="dynamicRoleProvider">         <beans:ref local="dynamicRoleProvider"/> </beans:property> </beans:bean> </beans:list> </beans:property> </beans:bean> <beans:bean id=” dynamicRoleProvider” class=”…”>     …… </beans:bean>

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号