<filter>
<filter-name>Acegi HTTP Request Security Filter</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>
Org.acegisecurity.intercept.web.SecurityEnforcementFilter
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Acigi HTTP Request Security Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在spring applicationContext.xml文件中的配置形式为
<bean id=”securityEnforcementFilter” class=””>
<property name=”filterSecurityInterceptor”>
<ref bean=”filterInvocationInteceptor”/>
</property>
<property name=”authenticationEntryPoint”>
<ref bean=”authenticationProcessingFilterEntryPoint”/>
</property>
以上代码是SecurityEnforcementFilter的配置,该过滤器对用户是否有权访问web资源作出最后的决定。其它的过滤器的配置类同。
配置完过滤器后,需要对拦截器FilterSecurityInterceptor进行配置,
<bean id=”filterInvocationInterceptor”
Class=””>
<property name=”authenuserCacheticationManager”>1
<property name=”accessDecisionManager”>
<property name=”objectDefinitionSource”>
<ref local="filterObjectDefinitionSource"/>
</property>
<bean
class="org.xiaohongli.acegi.db.DBFilterObjectDefinitionSource">
<constructor-arg><refbean="jdbcTemplate"/>
</constructor-arg>
</bean>
objectDefinitionSource属性定义了那些受保护的URL资源,其中引用了一个本地对象filterObjectDefinitionSource。filterObjectDefinitionSource类从数据库中读取需要保护的URL安全信息,它扩展了PathBasedFilterInvocationDefinition Map类。
同样,实现了另外一个methodObjectDefinitionSource类从数据库中读取需要保护的FUNCTION资源,它扩展了MethodDefinitionMap类。限于篇幅,在这里就不列出具体实现的源代码。
<bean
class="org.xiaohongli.acegi.db.DBMethodObjectDefinitionSource">
<constructor-arg><refbean="jdbcTemplate"/>
</constructor-arg>
</bean>
结束语
由于Spring在越来越多的项目中的应用,因此基于Spring应用的安全控制系统的研究就显得非常重要。Acegi提供了对Spring应用安全的支持,然而 Acegi本身提供的实例并不能满足大规模的复杂的权限需求,本文通过扩展Acegi的数据库设计即可满足复杂的权限需求。然而,怎样将Acegi应用到非Spring的系统中,还有待进一步研究。