日期:2014-05-16 浏览次数:20568 次
(声明:本设计目前还没有应用于大型系统权限管理,不排除会有一些问题,仅作技术储备,便于后期查阅;本文中中的Demo并没有进行完整的重构,仅作技术参考)
场景:
1、界面化的管理权限、分配用户权限。(非配置文件、注解形式;可理解为界面化的添加具体权限信息,并分配指定用户权限)
2、依赖于Spring Security。对后期权限系统的扩展必然会有好处,但是查找文档没有发现Spring Security提供便利的方式界面化管理权限(或许Spring Security本身支持,只是我看的文档不够全面,如果已支持还请读者发本人相关资料,不胜感激 partner4java@163.com)。
下面的文章将主要围绕本人如何实现界面化管理解决的一些问题,并不涉及Spring Security的具体细节使用,建议对Spring Security有一定了解再阅读本篇文章,Spring Security可参照《 Spring Security HelloWorld 》 (http://blog.csdn.net/partner4java/article/details/7928000)。
以下内容主要分为三部分:
1、功能展示;
2、基本架构设计;
3、问题解决具体方式。
一:功能展示
Demo下载地址:http://download.csdn.net/detail/partner4java/5220557
SQL脚本:http://download.csdn.net/detail/partner4java/5220915
Demo登录地址:http://localhost:8080/security_test/login.jsp
账号:(admin 1234)
首先展示一下我们管理权限的界面:
用户管理界面:
点击用户对应的权限跳转至权限分配界面:
权限分配为复选框,若已存在的权限会已选中。
二:基本架构设计
1、为AuthenticationManager设置自定义的UserDetailsService加载自定义表中的用户信息(验证用户信息和获取用户权限)。
2、修改默认AccessDecisionManager,在决策之前加入界面维护权限数据。
3、定义AuthorityCacheBean,用于辅助自定义AccessDecisionManager获取指定地址应该匹配的权限,并加入了缓存策略。
4、权限声明entity Authority,为其添加boolean matchUrl(String url)方法,用于返回是否遵循地址匹配;添加boolean matchMethod(HttpMethod httpMethod)方法,用于判断是否匹配方法,采用“大于等于”范围方式。
5、改变自带决策AccessDecisionManager,改为“只需要当前访问所有匹配权限中有一条权限没有人投反对票且有人赞同,则用户可以通过”。
三:问题解决具体方式
改变为界面化管理权限、用户,无非就几点:
1.通过登录信息匹配到维护的用户;
2.根据用户匹配界面化维护的权限;
3.根据地址匹配到对应的界面化维护的权限;
4.改变投票策略为你所需要的方式。
1、通过登录信息匹配到维护的用户
这一点Spring Security已经提供,无需我们再做过多修改,只需要在配置文件中指定:
&l