FilterChainProxy(net.sf.acegisecurity.util.FilterChainProxy)是acegi的一个类,具网友讲acegi真的超级难用。但是通过使用acegi我们可以用spring aop直接对service bean的每一个method做权限管理。
这次我们讲的主要是FilterChainProxy这个类在spring中的应用。首先在这个类中包含的一个方法setApplicationContext(org.springframework.context.ApplicationContext applicationContext)
这个方法首先对web.xml中所定义的applicationContext进行加载. FilterChainProxy的应用要依赖于acegi的另外一个Bean就是 FilterToBeanProxy,需要在web.xml中进行声明:
<!--Add filters for web applications-->
<filter>
<filter-name>securityFilter</filter-name>
<filter-class>net.sf.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>net.sf.acegisecurity.util.FilterChainProxy</param-value>
</init-param>
</filter>
然后在Filter-mappping中指定所需要过滤的文件
<filter-mapping>
<filter-name>securityFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
值得注意的是需要在ApplicationContext中需要进行如下配置:
<!-- ======================== FILTER CHAIN ======================= -->
<bean id="filterChainProxy" class="net.sf.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/j_security_check*=httpSessionContextIntegrationFilter,authenticationProcessingFilter
/**/*.html*=httpSessionContextIntegrationFilter,remoteUserFilter,anonymousProcessingFilter,securityEnforcementFilter
/**/*.jsp*=httpSessionContextIntegrationFilter,remoteUserFilter,securityEnforcementFilter
</value>
</property>
</bean>
否则在启动时会出现异常。