`

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“拒绝访问异常”。

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

 

总结来源:http://www.family168.com

4
0
分享到:
评论

相关推荐

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

    spring+security+11种过滤器介绍

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

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

    SpringSecurity项目

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

    springsecurity原理流程图.pdf

    SpringSecurity框架的权限认证流程原理,请求到来时SpringSecurity如果调用层层过滤器来完成认证;

    Spring Security 文档

    三种是细分角色和权限,并将用户、角色、权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器, 并分别实现AccessDecisionManager、...

    Spring Security3 安全 个人总结

    Spring Security3 拦截 过滤器 安全,框架原理入门

    Spring-Security-Demo

    SpringSecurity,这是一种基于Spring AOP和Servlet过滤器的安全框架。它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权。在Spring Framework基础上,Spring Security充分利用了依赖注入...

    关于ip的过滤器 spring security例子

    例子讲解可以参看博客:blog.csdn.net/dsundsun

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

    主要介绍了Spring Security 过滤器链的机制和特性,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

    java学习之SpringSecurity配置了登录链接无权限

    我们在使用SpringSecurity作为后台权限框架的时候,框架给我们提供了配置登录请求的接口,供我们配置登录链接,当我们配置了登录链接地址后,前端访问登陆请求的时候显示无权限。 异常分析 由于SpringSecurity的...

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

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

    SpringSecurity学习之自定义过滤器的实现代码

    主要介绍了SpringSecurity学习之自定义过滤器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    spring security 参考手册中文版

    Spring Security 参考 1 第一部分前言 15 1.入门 16 2.介绍 17 2.1什么是Spring Security? 17 2.2历史 19 2.3版本编号 20 2.4获得Spring安全 21 2.4.1使用Maven 21 Maven仓库 21 Spring框架 22 2.4.2 Gradle 23 ...

    spring security oauth2

    spring security 整合oauth2,进行权限授权管理,例子简单好用。

    Spring Security模块

    Spring Security完整用户权限认证模块,放上去修修改改就可简单使用,Spring Security实际上就是filte过滤器

    spring security3 开发手册

    spring security3 安全手册,过滤器的讲解,配置。

    spring_gateway_security_webflux.rar

    1.本项目为SpringCloud ...2.由于Gateway采用的是纯Webflux方式,所以原有的Spring基于传统拦截器、过滤器的方式无法正常使用SpringSecurity。 3.因此,本项目根据WebFlux的方式,进行了整合,实现了登录和权限验证。

    SpringSecurity 3.0.1.RELEASE.CHM

    7.4. 使用其他过滤器 —— 基于框架 8. 核心安全过滤器 8.1. FilterSecurityInterceptor 8.2. ExceptionTranslationFilter 8.2.1. AuthenticationEntryPoint 8.2.2. AccessDeniedHandler 8.3. ...

    Spring Security常用过滤器实例解析

    主要介绍了Spring Security常用过滤器实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring Security3.pdf

    pring security 的核心功能主要包括: 认证 (你是谁) 授权 (你能干什么) ...最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式

Global site tag (gtag.js) - Google Analytics