文章目录

  • 一、spring security 是什么?
  • 二、过滤器链讲解


提示:以下是本篇文章正文内容,下面案例可供参考

一、spring security 是什么?

spring security 是一种安全框架,一种安全服务。本质是一堆过滤器链。
其主要功能分为俩个主体和授权。

二、过滤器链讲解

过滤器主要有12个

spring security 和拦截器的区别 springsecurity拦截器链_请求处理

名称

简介

WebAsyncManagerIntegrationFilter

为请求处理过程中可能发生的异步调用准备安全上下文获取途径

SecurityContextPersistenceFilter

整个请求处理过程所需的安全上下文对象SecurityContext的准备和清理

不管请求是否针对需要登录才能访问的页面,这里都会确保SecurityContextHolder中出现一个SecurityContext对象:

1.未登录状态访问登录保护页面:空SecurityContext对象,所含Authentication为null

2.登录状态访问某个页面:从SecurityContextRepository获取的SecurityContext对象

HeaderWriterFilter

将指定的头部信息写入响应对象

CsrfFilter

对请求进行csrf保护

LogoutFilter

检测用户退出登录请求并做相应退出登录处理

UsernamePasswordAuthenticationFilter

检测用户名/密码表单登录认证请求并作相应认证处理:

1.session管理,比如为新登录用户创建新session(session fixation防护)和设置新的csrf token等

2.经过完全认证的Authentication对象设置到SecurityContextHolder中的SecurityContext上;

3.发布登录认证成功事件InteractiveAuthenticationSuccessEvent

4.登录认证成功时的Remember Me处理

5.登录认证成功时的页面跳转

RequestCacheAwareFilter

提取请求缓存中缓存的请求

1.请求缓存在安全机制启动时指定

2.请求写入缓存在其他地方完成

3.典型应用场景:

(1)用户请求保护的页面

(2)系统引导用户完成登录认证

(3)然后自动跳转到到用户最初请求页面

SecurityContextHolderAwareRequestFilter

包装请求对象使之可以访问SecurityContextHolder,从而使请求真正意义上拥有接口HttpServletRequest中定义的getUserPrincipal这种访问安全信息的能力

AnonymousAuthenticationFilter

如果当前SecurityContext属性Authentication为null,将其替换为一个AnonymousAuthenticationToken

SessionManagementFilter

检测从请求处理开始到目前是否有用户登录认证,如果有做相应的session管理,比如针对为新登录用户创建新的session(session fixation防护)和设置新的csrf token等。

ExceptionTranslationFilter

处理AccessDeniedException和 AuthenticationException异常,将它们转换成相应的HTTP响应

FilterSecurityInterceptor

一个请求处理的安全处理过滤器链的最后一个,检查用户是否已经认证,如果未认证执行必要的认证,对目标资源的权限检查,如果认证或者权限不足,抛出相应的异常:AccessDeniedException或者AuthenticationException

注意 :

上面的Filter并不总是同时被起用,根据配置的不同,会启用不同的Filter。
对于被起用的Filter,在对一个请求进行处理时,位于以上表格上部的过滤器先被调用。
上面的Filter被启用时并不是直接添加到Servlet容器的Filter chain中,而是先被组织成一个FilterChainProxy, 然后这个Filter会被添加到Servlet容器的Filter chain中。
FilterChainProxy也是一个Filter,它应用了代理模式和组合模式,它将上面的各个Filter组织到一起在自己内部形成一个filter chain,当自己被调用到时,它其实把任务代理给自己内部的filter chain完成。

上面的Spring Security Filter被组合到一个FilterChainProxy的过程可以参考配置类WebSecurityConfiguration的方法Filter springSecurityFilterChain(),这是一个bean定义方法,使用的bean名称为AbstractSecurityWebApplicationInitializer.DEFAULT_FILTER_NAME:springSecurityFilterChain。