资源描述:
《Acegi将资源权限数据存储到数据库》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、夜阑犹翦灯花弄赶项目--
2、回首页
3、2005年索引
4、--认识了一个叫丹丹的女孩Acegi资源配置动态扩展实现-- 1.问题提出在使用AcegiSecurityFramework的过程中,如果细心的话,会发现其资源和角色配置是在配置文件中的,下面是Appfuse中相关配置:class="net.sf.acegisecurity.intercept.web.FilterSecurityInterceptor">
5、 CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /signup.html=ROLE_ANONYMOUS,admin,tomcat /passwordhint.html*=ROLE_ANONYMOUS,admin,tomcat /**/*.html*=admin,tomcat /clickstreams.jsp=admin 2.E-R模型下图是需要的E-
6、R模型图1Acegi标准RBACE-R设计图中的用户与角色不再多做解释,我们主要关注一下Permission表和Resource表,这里Resource表用于存储系统资源,在web层一般来说就是url,如果使用acl,就是aclClass,此时Permission表中的aclMask用来存储对应的acl权限,考虑到acl在web项目中使用率不高,下面我将着重介绍web层的权限控制,对acl有兴趣的读者可以自己参阅AcegiReferenceGuide.3.如何阻止acegi从配置文件读取权限配置从Appfuse中的示例性配置可以
7、看出,acegi对权限配置的要求是“资源=角色1,角色2…角色n”,看过源代码的读者应该知道,最终这些配置将被组装为net.sf.acegisecurity.intercept.ObjectDefinitionSource(web层对应的实现是net.sf.acegisecurity.intercept.web.FilterInvocationDefinitionSource),那么我们怎么才能用数据库的数据来组装FilterInvocationDefinitionSource?这里涉及到一个PropertyEditor问题,在
8、Acegi中,FilterInvocationDefinitionSource是通过net.sf.acegisecurity.intercept.web.FilterInvocationDefinitionSourceEditor组装的,假如我们不想让FilterInvocationDefinitionSourceEditor从配置文件中读取权限配置,就需要自己实现一个ProdertyEditor来覆盖默认实现,下面是我的配置:图2customerEditorConfigurer配置那么,这个PropertyEditor中需要做
9、些什么呢?要做的就是使用一个比较特殊的标记,当遇到这个特殊标记的时候直接略过解析,我这里使用的标记是“DONT_USE_ME”,然后在PropertyEditor中简单的如下实现即可:/**Copyright2004-2005wangz.*Projectshufe_newsroom*/packagecom.skyon.um.security.acegi.intercept.web;importjava.beans.PropertyEditorSupport;importjava.io.BufferedReader;importj
10、ava.io.IOException;importjava.io.StringReader;importnet.sf.acegisecurity.ConfigAttributeDefinition;importnet.sf.acegisecurity.ConfigAttributeEditor;importnet.sf.acegisecurity.intercept.web.FilterInvocationDefinitionMap;importnet.sf.acegisecurity.intercept.web.PathBas
11、edFilterInvocationDefinitionMap;importnet.sf.acegisecurity.intercept.web.RegExpBasedFilterInvocationDefinitionMap;importorg.apache.