`
hypgr
  • 浏览: 276880 次
社区版块
存档分类
最新评论

图解Spring Security默认使用的过滤器

阅读更多
首先看一下auto-config="true"的情况下,默认会用到哪些过滤器。
auto-config='true'时的过滤器列表

图 7.1. auto-config='true'时的过滤器列表

 

下面开始对这些过滤器的功能一一道来。

7.1. HttpSessionContextIntegrationFilter

org.springframework.security.context.HttpSessionContextIntegrationFilter

图 7.2. org.springframework.security.context.HttpSessionContextIntegrationFilter


位于过滤器顶端,第一个起作用的过滤器。

用途一,在执行其他过滤器之前,率先判断用户的session中是否已经存在一个SecurityContext了。如果存在,就把 SecurityContext拿出来,放到SecurityContextHolder中,供Spring Security的其他部分使用。如果不存在,就创建一个SecurityContext出来,还是放到SecurityContextHolder中,供Spring Security的其他部分使用。

用途二,在所有过滤器执行完毕后,清空SecurityContextHolder,因为SecurityContextHolder是基于ThreadLocal的,如果在操作完成后清空ThreadLocal,会受到服务器的线程池机制的影响。

7.2. LogoutFilter

org.springframework.security.ui.logout.LogoutFilter

图 7.3. org.springframework.security.ui.logout.LogoutFilter


只处理注销请求,默认为/j_spring_security_logout。

用途是在用户发送注销请求时,销毁用户session,清空SecurityContextHolder,然后重定向到注销成功页面。可以与rememberMe之类的机制结合,在注销的同时清空用户cookie。

7.3. AuthenticationProcessingFilter

org.springframework.security.ui.webapp.AuthenticationProcessingFilter

图 7.4. org.springframework.security.ui.webapp.AuthenticationProcessingFilter


处理form登陆的过滤器,与form登陆有关的所有操作都是在此进行的。

默认情况下只处理/j_spring_security_check请求,这个请求应该是用户使用form登陆后的提交地址,form所需的其他参数可以参考:第 4.3 节 “登陆页面中的参数配置”

此过滤器执行的基本操作时,通过用户名和密码判断用户是否有效,如果登录成功就跳转到成功页面(可能是登陆之前访问的受保护页面,也可能是默认的成功页面),如果登录失败,就跳转到失败页面。

7.4. DefaultLoginPageGeneratingFilter

org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter

图 7.5. org.springframework.security.ui.webapp.DefaultLoginPageGeneratingFilter


此过滤器用来生成一个默认的登录页面,默认的访问地址为/spring_security_login,这个默认的登录页面虽然支持用户输入用户名,密码,也支持rememberMe功能,但是因为太难看了,只能是在演示时做个样子,不可能直接用在实际项目中。

如果想自定义登陆页面,可以参考:第 4 章 自定义登陆页面

7.5. BasicProcessingFilter

org.springframework.security.ui.basicauth.BasicProcessingFilter

图 7.6. org.springframework.security.ui.basicauth.BasicProcessingFilter


此过滤器用于进行basic验证,功能与AuthenticationProcessingFilter类似,只是验证的方式不同。有关basic验证的详细情况,我们会在后面的章节中详细介绍。

7.6. SecurityContextHolderAwareRequestFilter

org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter

图 7.7. org.springframework.security.wrapper.SecurityContextHolderAwareRequestFilter


此过滤器用来包装客户的请求。目的是在原始请求的基础上,为后续程序提供一些额外的数据。比如getRemoteUser()时直接返回当前登陆的用户名之类的。

7.7. RememberMeProcessingFilter

org.springframework.security.ui.rememberme.RememberMeProcessingFilter

图 7.8. org.springframework.security.ui.rememberme.RememberMeProcessingFilter


此过滤器实现RememberMe功能,当用户cookie中存在rememberMe的标记,此过滤器会根据标记自动实现用户登陆,并创建SecurityContext,授予对应的权限。

7.8. AnonymousProcessingFilter

org.springframework.security.providers.anonymous.AnonymousProcessingFilter

图 7.9. org.springframework.security.providers.anonymous.AnonymousProcessingFilter


为了保证操作统一性,当用户没有登陆时,默认为用户分配匿名用户的权限。

7.9. ExceptionTranslationFilter

org.springframework.security.ui.ExceptionTranslationFilter

图 7.10. org.springframework.security.ui.ExceptionTranslationFilter


此过滤器的作用是处理中FilterSecurityInterceptor抛出的异常,然后将请求重定向到对应页面,或返回对应的响应错误代码。

7.10. SessionFixationProtectionFilter

org.springframework.security.ui.SessionFixationProtectionFilter

图 7.11. org.springframework.security.ui.SessionFixationProtectionFilter


防御session固化攻击。

7.11. FilterSecurityInterceptor

org.springframework.security.intercept.web.FilterSecurityInterceptor

图 7.12. org.springframework.security.intercept.web.FilterSecurityInterceptor


用户的权限控制都包含在这个过滤器中。

功能一:如果用户尚未登陆,则抛出AuthenticationCredentialsNotFoundException“尚未认证异常”。

功能二:如果用户已登录,但是没有访问当前资源的权限,则抛出AccessDeniedException“拒绝访问异常”。

功能三:如果用户已登录,也具有访问当前资源的权限,则放行。

至此,我们完全展示了默认情况下Spring Security中使用到的过滤器,以及每个过滤器的应用场景和显示功能,下面我们会对这些过滤器的配置和用法进行逐一介绍。

分享到:
评论

相关推荐

    spring security3 开发手册

    Spring Security的入门通常以一个简单的Hello World示例开始,通过这个示例用户可以了解如何配置过滤器,利用命名空间简化配置过程,并且完善整个项目结构。运行示例将帮助用户理解Spring Security的基本工作原理。 ...

    myeclipse 8.5的spring security 2.0.5的简单练习(图解)

    4. **web.xml**: 配置 Spring Security 的过滤器和监听器。 ```xml <filter-name>springSecurityFilterChain <filter-class>org.springframework.web.filter.DelegatingFilterProxy <filter-name>...

    Spring Security权限管理开发手册

    - **配置过滤器:** 使用Spring Security提供的过滤器来实现基本的安全控制。 - **使用命名空间:** 通过XML配置文件中的命名空间简化Spring Security的配置过程。 - **完善整个项目:** 包括项目搭建、依赖管理...

    Spring Security 安全权限管理手册.pdf

    - 描述如何将配置的过滤器和命名空间应用到实际项目中,构建一个完整的Spring Security安全体系。 - **1.4 运行示例** - 提供一个具体的示例,演示如何运行配置好的Spring Security项目。 **2. 使用数据库管理...

    Spring Security(Spring安全权限管理手册) PDF

    - **图解过滤器**:这一部分通过图示方式详细解释了Spring Security中的各个过滤器的工作原理及它们之间的交互过程。 - **HttpSessionContextIntegrationFilter**:负责维护用户会话状态。 - **LogoutFilter**:...

    spring security

    - **配置过滤器**: Spring Security 提供了一组预定义的过滤器,可以轻松地在应用中集成安全功能。 - **HttpSessionContextIntegrationFilter**: 负责会话管理和同步。 - **LogoutFilter**: 处理登出逻辑。 - **...

    Spring Security3技术手册

    - Spring Security通过一系列的过滤器来实现对Web应用程序的安全控制。了解如何配置这些过滤器是入门Spring Security的关键。 - **示例代码**: 在`web.xml`中配置`<filter>`和`<filter-mapping>`,定义Spring ...

    SpringSecurity整合Jwt过程图解

    "SpringSecurity整合Jwt过程图解" 在本文中,我们将详细介绍SpringSecurity整合Jwt的过程图解。Jwt(Json Web Token)是一种基于Token的身份验证机制,广泛应用于Web应用程序的身份验证和授权中。SpringSecurity是...

    spring security2 安全手册(牛人写的)

    - **配置过滤器**:介绍如何在Spring Security中配置基本的安全过滤器,以拦截特定的请求并进行认证或授权。 - **使用命名空间**:展示如何利用Spring Security的XML命名空间简化安全配置。 - **完善整个项目**:...

    spring-security-tutorial:Spring Security教程带您逐步学习Spring Security,其中包含大量示例。 Spring Security教程是一本关于Spring Security学习的开源书。利用短暂时间写了本书,图文并茂,用大量实例带你一步一步走进Spring Security的世界

    3. **过滤器链(Filter Chain)**:Spring Security通过一系列过滤器实现其功能。如`HttpSessionAuthenticationStrategy`处理会话认证,`AnonymousAuthenticationFilter`处理匿名用户,`ExceptionTranslationFilter`...

    SpringSecurit安全权限管手册

    SpringSecurity基于过滤器链进行工作,这一章将详解各个核心过滤器的作用,如DelegatingFilterProxy、ChannelProcessingFilter、LogoutFilter等,以及它们在请求处理流程中的位置和功能。 7. **第七章:单点登录**...

    Acegi 数据库配置安全策略 源代码及图解

    - `security.jpg`可能是一个关于安全过滤器的图解,Acegi使用`SecurityContextHolder`来存储当前请求的认证信息,并通过一系列的过滤器(如`SecurityEnforcementFilter`)来检查访问权限。 - `...

Global site tag (gtag.js) - Google Analytics