Spring Security Acegi 学习之路二

Acegi 集成到Web应用程序中

 

 

Acegi通过多个不同用途的Servlet过滤器截取HTTP请求实施访问安全的控制。按照传统的方式,我们应用在web.xml配置文件中通过<filter>定义Servlet过滤器并使用<filter-mapping>元素定义过滤器对应的URL 匹配模式。

 

 

代理Acegi的过滤器

 

 

下面两个配置文件Acegi 如何通过FilterChainProxyServlet容器 Spring容器结合起来共同定义一个功能齐备的Servlet过滤器的。

 

web.xml—— Servlet容器

 

<filter>
<filter-name>channelFilterProxy</filter-name>
<filter-class>
org.acegisecurity.util.FilterToBeanProxy
</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>
org.acegisecurity.securechannel.ChannelProcessingFilter
</param-value>
</init-param>
</filter>

 

applicationContext.xml—— Spring容器

 

 

<bean class=" org.acegisecurity.securechannel.ChannelProcessingFilter ">
<property name="channelDecisionManager">
<ref local=” ChannelDecisionManager">
</property>
<property name="filterInvocationDefinitionSource">
<ref local=” FilterInvocationDefinitionSource ">
</property>
</bean>
 

使用代理过滤器链处理HTTP请求

 

当需要配置多个Servlet过滤器时,虽然我们可以通过FilterToBeanProxy 分别进行配置,但这将导致冗长难看的web.xml 同时还需要小心谨慎地通过过滤器的配置顺序保证它们的调用顺序。为了解决这个问题, Acegi Acegi 8.0 中添加了一个org.acegisecurity.util.FilterChainProxy FilterChainProxy 可以同时指定多个过滤器并奖它们组成一个过滤器链, FilterToBeanProxy且只要将代理目标设置为FilterChainProxy就可以了。

 

 

web.xml中,配置如下信息

 

 

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<filter>
<filter-name>AcegiFilterChainProxy</filter-name>
<filter-class>
org.acegisecurity.util.FilterToBeanProxy
</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>
org.acegisecurity.util.FilterChainProxy
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AcegiFilterChainProxy</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
 

applicationContext-acegi-plugin.xml

中,配置如下信息

 

 

<beans>
<bean id="filterChainProxy"  class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,logoutFilter
</value>
</property>
</bean>
<bean id=”channelProcessingFilter”
class=" org.acegisecurity.securechannel.ChannelProcessingFilter ">
</bean>
<bean id=”httpSessionContextIntegrationFilter”
class=" org.acegisecurity.Context.HttpSessionContextIntegrationFilter ">
</bean>
</beans>

 

FilterChainProxy Bean web.xml FilterToBeanProxy 的委托目标。FilterToBeanProxy通过filterInvocationDefinitionSource定义多个相互链接的过滤器,以逗号分隔。

filterInvocationDefinitionSource 属性由两类信息组成,其一是指令信息,其二是具体的资源定义信息。指令信息定义了额外的操作规则,如

CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISON 表示判断URL匹配时,先将URL转变为大写的格式,而PATTERN_TYPE_APACHE_ANT 则表示使用Ant路径风格进行匹配URL的描述,如果不提供这个命令,Acegi使用与此同时表达式来解析URL路径映射。

 

注意: 链中的过滤器名很长时也不要使用回车换行,否则将导致解析错误。

 

 


PS:本文主要摘自《精通Spring 2.x ——企业应用开发详解》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值