Spring Security Web 5.1.2 源码解析 -- 安全相关Filter清单

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/andy_zhang2007/article/details/84726992
名称 简介
WebAsyncManagerIntegrationFilter TODO
SecurityContextPersistenceFilter 整个请求处理过程所需的安全上下文对象SecurityContext的准备和清理
不管请求是否针对需要登录才能访问的页面,这里都会确保SecurityContextHolder中出现一个SecurityContext对象:
1.未登录状态访问登录保护页面:空SecurityContext对象,所含Authenticationnull
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.登录认证成功时的页面跳转
DefaultLoginPageGeneratingFilter 生成缺省的登录页面
DefaultLogoutPageGeneratingFilter 生成缺省的退出登录页面
BasicAuthenticationFilter 检测和处理http basic认证
RequestCacheAwareFilter 提取请求缓存中缓存的请求
1.请求缓存在安全机制启动时指定
2.请求写入缓存在其他地方完成
3.典型应用场景:
    1.用户请求保护的页面,
    2.系统引导用户完成登录认证,
    3.然后自动跳转到到用户最初请求页面
SecurityContextHolderAwareRequestFilter 包装请求对象使之可以访问SecurityContextHolder,从而使请求真正意义上拥有接口HttpServletRequest中定义的getUserPrincipal这种访问安全信息的能力
RememberMeAuthenticationFilter 针对Remember Me登录认证机制的处理逻辑
AnonymousAuthenticationFilter 如果当前SecurityContext属性Authenticationnull,将其替换为一个AnonymousAuthenticationToken
SessionManagementFilter 检测从请求处理开始到目前是否有用户登录认证,如果有做相应的session管理,比如针对为新登录用户创建新的session(session fixation防护)和设置新的csrf token等。
ExceptionTranslationFilter 处理AccessDeniedExceptionAuthenticationException异常,将它们转换成相应的HTTP响应
FilterSecurityInterceptor TODO

注意 :

  • 上面的Filter并不总是同时被起用,根据配置的不同,会启用不同的Filter
  • 对于被起用的Filter,在对一个请求进行处理时,位于以上表格上部的过滤器先被调用。
  • 上面的Filter被启用时并不是直接添加到Servlet容器的Filter chain中,而是先被组织成一个FilterChainProxy, 然后这个Filter会被添加到Servlet容器的Filter chain中。

    FilterChainProxy也是一个Filter,它应用了代理模式和组合模式,它将上面的各个Filter组织到一起在自己内部形成一个filter chain,当自己被调用到时,它其实把任务代理给自己内部的filter chain完成。

猜你喜欢

转载自blog.csdn.net/andy_zhang2007/article/details/84726992