`

Spring Security 11种过滤器

阅读更多
1.HttpSessionContextIntegrationFilter

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

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



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

--------------------------------------------------------------------------------------------

2.LogoutFilter



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

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

--------------------------------------------------------------------------------------------

3.AuthenticationProcessingFilter


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

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


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

<form action="${pageContext.request.contextPath}/j_spring_security_check" style="width:260px;text-align:center;">
  <fieldset>
    <legend>登陆</legend>
    用户: <input type="text" name="j_username" style="width:150px;" value="${sessionScope['SPRING_SECURITY_LAST_USERNAME']}"/><br />
    密码: <input type="password" name="j_password" style="width:150px;" /><br />
    <input type="checkbox" name="_spring_security_remember_me" />两周之内不必登陆<br />
    <input type="submit" value="登陆"/>
    <input type="reset" value="重置"/>
  </fieldset>
</form>

/j_spring_security_check,提交登陆信息的URL地址。

自定义form时,要把form的action设置为/j_spring_security_check。注意这里要使用绝对路径,避免登陆页面存放的页面可能带来的问题。

j_username,输入登陆名的参数名称。

j_password,输入密码的参数名称

_spring_security_remember_me,选择是否允许自动登录的参数名称。

可以直接把这个参数设置为一个checkbox,无需设置value,Spring Security会自行判断它是否被选中。

--------------------------------------------------------------------------------------------

4.DefaultLoginPageGeneratingFilter

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

自定义登陆页面

<http auto-config='true'>
    <intercept-url pattern="/login.jsp" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
    <intercept-url pattern="/**" access="ROLE_USER" />
    <form-login login-page="/login.jsp"
                authentication-failure-url="/login.jsp?error=true"
                default-target-url="/" />
</http>

--------------------------------------------------------------------------------------------

5.BasicProcessingFilter

此过滤器用于进行basic验证,功能与AuthenticationProcessingFilter类似,只是验证的方式不同。

添加basic认证,去掉auto-config="true",并加上<http-basic />

<http auto-config="true">
    <http-basic />
    <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
    <intercept-url pattern="/" access="ROLE_USER" />
</http>
---------------------------------------------------------------------------------------------

6.SecurityContextHolderAwareRequestFilter

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

---------------------------------------------------------------------------------------------

7.RememberMeProcessingFilter

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

在配置文件中使用auto-config="true"就会自动启用rememberMe

实际上,Spring Security中的rememberMe是依赖cookie实现的,当用户在登录时选择使用rememberMe,系统就会在登录成功后将为用户生成一个唯一标识,并将这个标识保存进cookie中,我们可以通过浏览器查看用户电脑中的cookie。

---------------------------------------------------------------------------------------------

8.AnonymousProcessingFilter

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

在配置文件中使用auto-config="true"就会启用匿名登录功能。在启用匿名登录之后,如果我们希望允许未登录就可以访问一些资源,可以在进行如下配置。

<http auto-config='true'>
    <intercept-url pattern="/" access="IS_AUTHENTICATED_ANONYMOUSLY" />
    <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
    <intercept-url pattern="/**" access="ROLE_USER" />
</http>

设置成 ROLE_ANONYMOUS 也可以。

<http auto-config='true'>
    <intercept-url pattern="/" filters="none" />
    <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
    <intercept-url pattern="/**" access="ROLE_USER" />
</http>

filters="none"表示当我们访问“/”时,是不会使用任何一个过滤器去处理这个请求的,它可以实现无需登录即可访问资源的效果,但是因为没有使用过滤器对请求进行处理,所以也无法利用安全过滤器为我们带来的好处,最简单的,这时SecurityContext内再没有保存任何一个权限主体了,我们也无法从中取得主体名称以及对应的权限信息。

---------------------------------------------------------------------------------------------

9.ExceptionTranslationFilter

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

---------------------------------------------------------------------------------------------

10.SessionFixationProtectionFilter

防御会话伪造攻击。

解决session fix的问题其实很简单,只要在用户登录成功之后,销毁用户的当前session,并重新生成一个session就可以了。

<http auto-config='true' session-fixation-protection="none">
    <intercept-url pattern="/admin.jsp" access="ROLE_ADMIN" />
    <intercept-url pattern="/**" access="ROLE_USER" />
</http>

session-fixation-protection的值共有三个可供选择,none,migrateSession和newSession。默认使用的是migrationSession
---------------------------------------------------------------------------------------------

11.FilterSecurityInterceptor

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

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

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

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

相关推荐

    spring+security+11种过滤器介绍.doc

    1. HttpSessionContextIntegrationFilter:这是Spring Security过滤器链的第一个过滤器。它的主要职责是确保每个线程都有一个SecurityContext实例,这个实例存储了当前用户的认证信息。当请求到达时,它检查session...

    spring security 4 小例子带自定义过滤器

    在Spring Security 4中,我们可以通过自定义过滤器来扩展其功能,以满足特定的安全需求。在这个小例子中,我们将探讨如何创建并集成自定义过滤器,以及它在Spring Security中的工作原理。 首先,我们需要理解Spring...

    SpringSecurity项目

    springsecurity是一个功能强大且高度可定制的身份验证和访问控制框架。springsecurity是一个...最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。

    关于ip的过滤器 spring security例子

    本文将深入探讨如何在Spring Security中实现IP过滤器,以便控制访问应用的客户端IP地址。 首先,我们需要理解Spring Security的基本架构。它是一个多层次的组件模型,其中包括认证、授权和会话管理等核心功能。在...

    全面解析Spring Security 过滤器链的机制和特性

    Spring Security 过滤器链是 Spring Security 框架中的一种核心机制,负责处理 HTTP 请求的安全验证和授权。今天,我们将深入探讨 Spring Security 过滤器链的机制和特性,以帮助读者更好地理解和应用 Spring ...

    Spring Security 资料合集

    - Spring Security 的核心是过滤器链,它包含了一系列安全过滤器,如`FilterSecurityInterceptor`和`AuthenticationProcessingFilter`。这些过滤器在请求处理前进行拦截,执行认证和授权操作。 3. **安全性配置**...

    springsecurity原理流程图.pdf

    Spring Security的过滤器链是一种职责链设计模式,允许用户按照特定顺序添加多个过滤器来处理请求。 b. 除了AbstractAuthenticationProcessingFilter之外,过滤器链中还包括诸如ExceptionTranslationFilter、...

    spring security 完整项目实例

    此外,Spring Security提供了过滤器链,这是处理请求的关键部分。如AnonymousAuthenticationFilter负责匿名用户的处理,UsernamePasswordAuthenticationFilter处理基于表单的登录,而RememberMeAuthenticationFilter...

    springsecurity学习笔记

    4. **Filter Chain**:Spring Security通过一系列过滤器形成一个过滤链,每个过滤器都有特定的任务,如BasicAuthenticationFilter处理基本认证,RememberMeAuthenticationFilter处理记住我功能等。 5. **Session ...

    SpringSecurity学习总结源代码

    1. **Filter Security Interceptor**:这是SpringSecurity的主要过滤器,负责检查请求并决定是否允许访问。它会根据预定义的访问控制规则进行判断。 2. **Authentication Manager**:处理用户认证的组件,可以使用...

    springSecurity 实现传参

    7. **自定义过滤器**:如果你的逻辑更复杂,比如需要在登录成功后执行特定操作,可以创建自定义过滤器并将其插入到Spring Security的过滤器链中。 通过以上步骤,你可以实现Spring Security的登录验证和参数传递...

    狂神Spring Security静态资源

    Spring Security默认启用了CSRF防护,如果要关闭,可以在配置中移除对应的过滤器。 总的来说,"狂神Spring Security静态资源"的资料应该涵盖了如何在Spring Boot中配置Spring Security来保护和管理静态资源的知识。...

    SpringSecurity笔记,编程不良人笔记

    - **Filter Chain**: SpringSecurity通过一系列过滤器实现其安全功能,这些过滤器构成了Filter Chain。每个过滤器负责特定的安全任务,如认证、授权等。 - **Authentication**: 表示用户的身份信息,包括用户名、...

    Spring Cloud Gateway 整合 Spring Security 统一登录认证鉴权

    它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java 开发中广泛使用的安全框架,用于实现认证和授权。当我们将这两者结合时,我们可以创建一个强大的统一登录认证...

    spring spring security2.5 jar

    3. **过滤器链**:Spring Security的核心在于其过滤器链,它拦截HTTP请求并应用安全策略。`FilterSecurityInterceptor`是其中的关键组件,负责根据配置的访问规则对请求进行处理。 4. **会话管理**:Spring ...

    Spring Security 文档

    在Spring Security 3的使用中,有四种常见的实现方式: 1. **全配置文件方式**:所有用户、权限和资源URL都直接硬编码在XML配置文件中。这种方法简单明了,但不灵活,一旦需求变化,就需要修改配置文件,不利于维护...

    spring_security_3.1

    3. **过滤器链**:Spring Security的核心是过滤器链,它拦截HTTP请求并执行安全逻辑。`FilterSecurityInterceptor`是其中的关键组件,它处理授权检查。3.1版中,你可以自定义过滤器顺序和配置,以适应不同的应用需求...

    spring security3 中文版本

    - **配置 web.xml**:在 web.xml 文件中配置 Spring Security 的过滤器链。 - **最小 `&lt;http&gt;` 配置**:使用 `&lt;http&gt;` 元素可以轻松地配置 HTTP 认证和授权规则。 - **自动配置**:`auto-config` 属性可以自动配置...

    springboot springsecurity动态权限控制

    在这个“springboot springsecurity动态权限控制”的主题中,我们将深入探讨如何在Spring Boot项目中集成Spring Security,实现动态权限控制,让菜单权限的管理更加灵活和高效。 首先,我们需要理解Spring Security...

    最详细Spring Security学习资料(源码)

    Spring Security是一个功能强大且高度可定制的身份验证和授权框架,专门用于保护Java应用程序的...Web集成:Spring Security能够无缝集成到Spring框架和Spring MVC中,提供了过滤器、标签库等工具,简化了权限控制和

Global site tag (gtag.js) - Google Analytics