上篇
中我们说了下
LogoutFilter的配置, 这篇里接着看另一个常见的配置SecurityContextHolderAwareRequestFilter. 下面先看怎么把它配置到Acegi里.
应该说对
securityContextHolderAwareRequestFilter
的配置要比LogoutFilter的更简单些. 有以下两步:
Step1: 定义一个名为securityContextHolderAwareRequestFilter的bean, 如下所示:
<bean id="securityContextHolderAwareRequestFilter"
class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter" />
呵呵, 简单地我就有些不好意思往这写了. 就这么一个干巴巴的类, 别什么属性要配置的.
Step2: 把定义好的
securityContextHolderAwareRequestFilter放到
filterInvocationDefinitionSource里, 如下所示:
/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter
,exceptionTranslationFilter,filterInvocationInterceptor
上面是对它的配置, 这个配置有些干巴巴的, 那它究竟有什么用呢? 我们接着往下看, 那将是一个丰富多彩的世界.
SecurityContextHolderAwareRequestFilter类名怎么这么长? 也看不出什么有用的信息啊. 不过,
看文档得知
SecurityContextHolderAwareRequestFilter的作用是:将传来的
request用一个
HttpServletRequestWrapper封装下再传给
filterChain. 我们不禁要问? 为什么要这么做呢? 也就是说这么做有什么好处呢?
要弄通这个问题, 我们得看这个Filter对传的
request做了些什么手脚, 也就是说是以什么样的一个
HttpServletRequestWrapper来封装了传来的
request. 在Acegi中我们发现就有两个
HttpServletRequestWrapper的子类:
SecurityContextHolderAwareRequestWrapper和
SavedRequestAwareWrapper. 它们又有什么样的特质呢? 发现
SavedRequestAwareWrapper是
SecurityContextHolderAwareRequestWrapper的子类, 为了钻研的方便, 我们先看父类
SecurityContextHolderAwareRequestWrapper
, 所谓有其父必有其子嘛.
先解剖下这个类, 这个类只有一个属性authenticationTrustResolver(其实它没什么多大的用处, 待会再细说), 覆盖了
HttpServletRequestWrapper的三个方法:
getRemoteUser,
getUserPrincipal,
isUserInRole.
(这里先顺便说下, 我以前一直没注意到上面的这三个方法是接口里定义的, 看来Servlet规范里早就考虑到Security方面的问题了; 另一个没注意到的是, 原来
Principal是Java标准类security包下的定义的接口, 而Acegi里重要的接口
Authentication是继承自
Principal
)
于是问题就转为为什么要单独再覆盖这三个方法了.那得看这三个方法又都干了什么. 看方法的实现, 发现它们实际上是做了同样的事, 即通过
SecurityContextHolder.getContext().getAuthentication()拿到
Authentication后再get出String类型的
RemoteUser,或
Principal类型信息, 或看这个
Authentication是否有指定的权限. 也就是说它们把Acegi里自身的验证信息放到Servlet规范里体现的对Security的支持!
那为什么非要用Acegi的认证信息来替换或填充Servlet规范中
Security信息呢? 我想有这么几点好处:
1, 替换掉Web容器自身的认证信息. 拿Tomca为例, 我们知道在Tomcat中可以配置管理权限的, 若Tomcat自身配置了权限管理, 而Acegi不做什么处理的话, 程序员从
HttpServletRequest里通过调用上面三种方法得到的Security方面的信息就不是通过Acegi配置的了, 那样岂不就乱套了?
Acegi自身的Security作用也就给架空了, 这还得了?
于是Acegi就有果断地通过
SecurityContextHolderAwareRequestWrapper把漏洞给补上了.
2, 还有一个可能的好处, 那就是通过这种覆盖处理, 程序员可以在Action或JSP中方便地得到当前登录用户的信息, 而不必在系统中揉合进Acegi自己的API. 项目中这样的反例太多了.
通过上面的分析,再看类的名字
SecurityContextHolderAwareRequestFilter, 这样也就好理解了, 真是顾名思义! 这个名字表达的意思是说, 这个Filter是让Request
来aware下SecurityContextHolder里的信息, 这个让它Aware正是通过覆盖三个方法实现的.
好了, 这篇就写到这里, 下一篇中我们将看
SecurityContextHolderAwareRequestFilter子类
SavedRequestAwareWrapper又加了些什么功能. Until the next.
分享到:
相关推荐
JAVA开发专家:敏捷Acegi、CAS:构建安全的Java系统 pdf
Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for Spring,当前版本为 0.8.3。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和...
而Acegi Security是Spring社区早期的一个安全模块,它提供了全面的身份验证、授权和会话管理功能,为基于Spring的应用程序提供了强大的安全性支持。本实战教程将深入探讨如何将Acegi Security集成到Spring框架中,...
《实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架》这本书提供了一个很好的起点,它详细介绍了如何设置和使用Acegi,以及如何解决实际开发中的安全问题。 总的来说,Acegi为基于Spring的Web应用提供...
Acegi是Spring Security的前身,它是一个强大的、可配置的安全框架,用于构建安全的Java Web应用程序。本实战教程将深入探讨如何将Acegi集成到基于Spring的Web应用中,以实现用户认证、授权以及安全控制等功能。 ...
Acegi是Spring Security的前身,它是一个非常强大的安全框架,用于保护基于Spring的应用程序。这篇博客的标题"Acegi(四):Acegi初体验及初解剖"表明我们将深入探讨Acegi的基础用法和内部机制。尽管Acegi已经被Spring ...
Acegi Security是Spring框架早期的一个安全模块,它提供了全面的基于Spring的应用程序的访问控制和身份验证功能。在本文中,我们将深入探讨如何使用Acegi Security来实现用户权限的控制。 Acegi Security的核心功能...
Acegi 是一个在Java开发领域,特别是Spring框架中曾经广泛使用的安全组件,全称为Acegi Security。这个系统为Spring应用程序提供了全面的安全管理解决方案,包括身份验证、授权、会话管理以及安全事件处理等功能。...
在《实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.pdf》中,可能会详细讲解如何配置和使用Acegi。以下是一些关键步骤: 1. **添加依赖**:首先,在项目中引入Acegi的依赖库,通常是通过Maven或...
在实际应用中,我们通常会遵循以下步骤来使用Acegi: 1. **集成Acegi**:将Acegi库添加到项目的类路径中,并在Spring配置文件中声明Acegi的安全配置。 2. **配置安全上下文**:定义安全上下文,指定认证和授权的...
Acegi是Spring Security的前身,它是一个用于Java企业级应用的安全框架,提供了全面的身份验证、授权和会话管理功能。这个压缩包包含了Acegi的示例代码和一个学习资源,对于初学者来说是非常宝贵的资料。 首先,让...
Acegi 安全框架是 Spring 框架的一个扩展,用于提供高级的身份验证和授权功能。在"使用 Acegi 保护 Java 应用程序:续二"这篇博文中,作者可能详细介绍了如何集成 Acegi 安全框架到 Java 应用程序中,以及如何配置和...
Acegi Security是一款经典的Java安全框架,它为Spring框架提供了安全集成。在本案例中,我们关注的是`acegi-security-resin-0.8.1.1.jar.zip`这个压缩包,其中包含了`acegi-security-resin-0.8.1.1.jar`文件和`...
- AceGI:AceGi Security,一个用于Spring Web应用的安全框架。 - CAS:Central Authentication Service,中心认证服务,提供单一登录解决方案。 - SSO:Single Sign-On,单点登录,用户只需登录一次就能访问所有...
Acegi Security,现已被Spring ...结合"acegi-sample.war"和"实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架.pdf",开发者可以更好地理解和掌握Acegi Security的使用方法,从而提升Web应用的安全性。
Acegi 安全框架是 Spring 框架的一个扩展,用于提供高级安全性和身份验证功能。这个框架在 Java 应用程序中非常受欢迎,因为它允许开发者以声明式的方式定义访问控制规则,使得应用的安全管理更加方便。在这个"使用 ...
acegi与cas集成 <!-- ========= Acegi as a CAS Client的配置============= --> class="org.acegisecurity.ui.cas.CasProcessingFilter"> ref="authenticationManager" /> value="/login.do?...
【Acegi框架介绍 acegi安全与认证】 Acegi Security,现称为Spring Security,是一个强大的安全框架,主要用于基于Spring的企业级应用。它通过Spring的依赖注入(IoC)和面向切面编程(AOP)功能,提供了声明式的...
Acegi Security Taglib 提供了一系列的标签,例如`<acegi:authentication>`用于处理用户身份验证,`<acegi:access>`用于定义访问控制等。 在使用`acegi-security-taglib-0.51.jar`时,首先需要将其添加到项目类路径...