版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/andy_zhang2007/article/details/84726992
名称 | 简介 |
---|---|
WebAsyncManagerIntegrationFilter |
TODO |
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.登录认证成功时的页面跳转 |
DefaultLoginPageGeneratingFilter |
生成缺省的登录页面 |
DefaultLogoutPageGeneratingFilter |
生成缺省的退出登录页面 |
BasicAuthenticationFilter |
检测和处理http basic认证 |
RequestCacheAwareFilter |
提取请求缓存中缓存的请求 1.请求缓存在安全机制启动时指定 2.请求写入缓存在其他地方完成 3.典型应用场景: 1.用户请求保护的页面, 2.系统引导用户完成登录认证, 3.然后自动跳转到到用户最初请求页面 |
SecurityContextHolderAwareRequestFilter |
包装请求对象使之可以访问SecurityContextHolder ,从而使请求真正意义上拥有接口HttpServletRequest 中定义的getUserPrincipal 这种访问安全信息的能力 |
RememberMeAuthenticationFilter |
针对Remember Me 登录认证机制的处理逻辑 |
AnonymousAuthenticationFilter |
如果当前SecurityContext 属性Authentication 为null ,将其替换为一个AnonymousAuthenticationToken |
SessionManagementFilter |
检测从请求处理开始到目前是否有用户登录认证,如果有做相应的session 管理,比如针对为新登录用户创建新的session (session fixation 防护)和设置新的csrf token 等。 |
ExceptionTranslationFilter |
处理AccessDeniedException 和 AuthenticationException 异常,将它们转换成相应的HTTP响应 |
FilterSecurityInterceptor |
TODO |
注意 :
- 上面的
Filter
并不总是同时被起用,根据配置的不同,会启用不同的Filter
。 - 对于被起用的
Filter
,在对一个请求进行处理时,位于以上表格上部的过滤器先被调用。 - 上面的
Filter
被启用时并不是直接添加到Servlet
容器的Filter chain
中,而是先被组织成一个FilterChainProxy
, 然后这个Filter
会被添加到Servlet
容器的Filter chain
中。FilterChainProxy
也是一个Filter
,它应用了代理模式和组合模式,它将上面的各个Filter
组织到一起在自己内部形成一个filter chain
,当自己被调用到时,它其实把任务代理给自己内部的filter chain
完成。