`

Spring Security Acegi 学习之路二(转)

阅读更多

Acegi 集成到 Web 应用程序中

 

 

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

 

 

代理 Acegi 的过滤器

 

 

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

 

web.xml —— Servlet 容器

 

Xml代码
  1. < filter >   
  2. < filter-name > channelFilterProxy </ filter-name >   
  3. < filter-class >   
  4. org.acegisecurity.util.FilterToBeanProxy  
  5. </ filter-class >   
  6. < init-param >   
  7. < param-name > targetClass </ param-name >   
  8. < param-value >   
  9. org.acegisecurity.securechannel.ChannelProcessingFilter  
  10. </ param-value >   
  11. </ init-param >   
  12. </ filter >   
<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 容器

 

 

Xml代码
  1. < bean   class = " org.acegisecurity.securechannel.ChannelProcessingFilter " >   
  2. < property   name = "channelDecisionManager" >   
  3. < ref   local =” ChannelDecisionManager" >   
  4. </ property >   
  5. < property   name = "filterInvocationDefinitionSource" >   
  6. < ref   local =” FilterInvocationDefinitionSource " >   
  7. </ property >   
  8. </ bean >   
<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 中,配置如下信息

 

 

Xml代码
  1. < context-param >   
  2. < param-name > contextConfigLocation </ param-name >   
  3. < param-value > classpath:applicationContext.xml </ param-value >   
  4. </ context-param >   
  5. < filter >   
  6. < filter-name > AcegiFilterChainProxy </ filter-name >   
  7. < filter-class >   
  8. org.acegisecurity.util.FilterToBeanProxy  
  9. </ filter-class >   
  10. < init-param >   
  11. < param-name > targetClass </ param-name >   
  12. < param-value >   
  13. org.acegisecurity.util.FilterChainProxy  
  14. </ param-value >   
  15. </ init-param >   
  16. </ filter >   
  17. < filter-mapping >   
  18. < filter-name > AcegiFilterChainProxy </ filter-name >   
  19. < url-pattern > /* </ url-pattern >   
  20. </ filter-mapping >   
  21. < listener >   
  22. < listener-class >   
  23. org.springframework.web.context.ContextLoaderListener  
  24. </ listener-class >   
  25. </ listener >   
<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

中,配置如下信息

 

 

Xml代码
  1. < strong > < beans >   
  2. < bean   id = "filterChainProxy"    class = "org.acegisecurity.util.FilterChainProxy" >   
  3. < property   name = "filterInvocationDefinitionSource" >   
  4. < value >   
  5. CONVERT_URL_TO_UPPERCASE_BEFORE_COMPARISON  
  6. PATTERN_TYPE_APACHE_ANT  
  7. /**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,logoutFilter  
  8. </ value >   
  9. </ property >   
  10. </ bean >   
  11. < bean   id =”channelProcessingFilter”  
  12. class = " org.acegisecurity.securechannel.ChannelProcessingFilter " >   
  13. </ bean >   
  14. < bean   id =”httpSessionContextIntegrationFilter”  
  15. class = " org.acegisecurity.Context.HttpSessionContextIntegrationFilter " >   
  16. </ bean >   
  17. </ beans >   
  18. </ strong >   
<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 路径映射。

 

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

分享到:
评论

相关推荐

    spring的acegi应用

    Acegi是Spring早期的一个安全组件,后来发展成为Spring Security,是Spring生态系统中的重要部分,用于提供全面的安全解决方案。 Spring Security(原名Acegi Security)是一个强大的框架,用于保护基于Spring的...

    spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行

    spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,保证能运行 spring_acegi精彩实例,带MYSQL数据库脚本,...

    Spring源代码解析(十):Spring_Acegi框架授权的实现.doc

    在Spring框架中,Acegi(现在已经并入Spring Security)是一个强大的安全管理组件,它提供了认证和授权功能。在本文中,我们将深入探讨Spring_Acegi框架如何实现授权机制,特别是通过`FilterSecurityInterceptor`来...

    Spring Acegi权限控制

    Acegi Security(现已被Spring Security替代)是一个功能强大的安全框架,它主要解决了认证(Authentication)和授权(Authorization)这两个核心的安全问题。 首先,让我们理解认证和授权的基本概念: - **认证**...

    spring security3 中文版本

    Spring Security 的前身是 Acegi Security,它于 2004 年发布。2006 年,Acegi 被集成到 Spring 框架中,并改名为 Spring Security。自此之后,Spring Security 成为了 Spring 生态系统中的一个重要组成部分,不断...

    spring acegi 详细文档

    &lt;bean id="filterSecurityInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"&gt; &lt;sec:filter-security-metadata-source&gt; **" access="ROLE_ADMIN"/&gt; **" access="IS_...

    Spring的ACEGI的应用

    而在安全方面,Spring曾提供了一个名为Acegi Security的模块,它是Spring早期的一个安全解决方案,用于实现复杂的认证和授权需求。本文将深入探讨Spring的Acegi应用及其核心概念。 **1. Acegi Security简介** Acegi...

    spring-security 官方文档 中文版

    Spring Security 最初是由 Luke Taylor 和 Ray Ryan 开发的名为 Acegi Security 的项目,在 2005 年被并入 Spring 项目,并重新命名为 Spring Security。自那时起,Spring Security 经历了多个版本的迭代,不断地...

    spring-security所需要的jar包,

    Acegi Security提供了一套基于Spring的认证和授权机制,但在Spring Security 2.x版本之后,大部分功能已被Spring Security自身所取代。 3. **spring-security-core-tiger-2.0.5.RELEASE-tests.jar**:这是一个测试...

    spring security reference【洋文】

    Spring Security是一个功能强大且可高度定制的身份验证和访问控制...Spring Security Reference作为官方文档,是学习和应用Spring Security的重要资源,建议深入研究以充分利用其提供的功能来增强应用程序的安全性。

    Spring Security 把授权信息写入数据库

    在从Acegi安全框架转换到Spring Security 2.0时,一个重要的变化就是如何将授权信息存储从XML配置文件迁移到数据库。这使得授权策略更加灵活,易于管理和维护。 24.1. Spring Security简介 Spring Security 2.0...

    Spring+Acegi+ehcache安全框架常用jar包.rar

    而Acegi Security(现在已经更名为Spring Security)是Spring生态体系中的一个强大安全组件,用于处理应用程序的安全访问控制。Ehcache则是一个广泛使用的内存缓存系统,它可以帮助提高应用性能,通过缓存数据来减少...

    spring Acegi例子,很简单的一个acegi实例,容易理解

    3. **过滤器安全链(Filter Security Interceptor)**:Acegi的核心组件之一,它是Servlet过滤器,负责拦截请求并根据配置的策略进行身份验证和授权。 4. **安全性配置(Security Configurations)**:在Spring应用...

    Spring Security 中文教程.pdf

    - **发展历程**:Spring Security的发展历程可以追溯到早期的ACEGI Security项目,后来被集成到Spring框架中,并经过多次迭代更新,形成了如今功能强大且灵活的Spring Security框架。 - **获取方式**: - **项目...

    springsecurity官方文档3.2

    - **历史**: 本章节简要回顾了 Spring Security 的发展历程,包括其前身 Acegi 安全框架的历史背景。 - **版本编号**: 明确了 Spring Security 版本的命名规则,例如 `3.2.0.M2` 中的 `.M2` 表示这是一个里程碑版本...

    Spring ACEGI手册(部份)

    在阅读《Spring ACEGI手册(部分)》.doc文档时,可以深入学习如何配置和使用该框架,以及如何解决常见的安全问题。 **总结** Spring ACEGI作为一个强大的安全框架,为开发者提供了丰富的工具和机制来保护应用程序...

    acegi(Spring Security) 参考手册

    总的来说,《Acegi(Spring Security)参考手册》是学习和理解Spring Security不可或缺的资源,无论你是初学者还是有经验的开发者,都能从中获取到实用的知识和深入的理解,以构建更加安全、健壮的Spring应用。...

Global site tag (gtag.js) - Google Analytics