SpringSecurity 采用的是责任链的设计模式,它有一条很长的过滤器链。如今对这条过滤器链的各个进行说明:设计模式
WebAsyncManagerIntegrationFilter:将 Security 上下文与 Spring Web 中用于处理异步请求映射的 WebAsyncManager 进行集成。缓存
SecurityContextPersistenceFilter:在每次请求处理以前将该请求相关的安全上下文信息加载到 SecurityContextHolder 中,而后在该次请求处理完成以后,将 SecurityContextHolder 中关于此次请求的信息存储到一个“仓储”中,而后将 SecurityContextHolder 中的信息清除,例如在Session中维护一个用户的安全信息就是这个过滤器处理的。安全
HeaderWriterFilter:用于将头信息加入响应中。cookie
CsrfFilter:用于处理跨站请求伪造。session
LogoutFilter:用于处理退出登陆。异步
UsernamePasswordAuthenticationFilter:用于处理基于表单的登陆请求,从表单中获取用户名和密码。默认状况下处理来自 /login 的请求。从表单中获取用户名和密码时,默认使用的表单 name 值为 username 和 password,这两个值能够经过设置这个过滤器的usernameParameter 和 passwordParameter 两个参数的值进行修改。设计
DefaultLoginPageGeneratingFilter:若是没有配置登陆页面,那系统初始化时就会配置这个过滤器,而且用于在须要进行登陆时生成一个登陆表单页面。对象
BasicAuthenticationFilter:检测和处理 http basic 认证。资源
RequestCacheAwareFilter:用来处理请求的缓存。rem
SecurityContextHolderAwareRequestFilter:主要是包装请求对象request。
AnonymousAuthenticationFilter:检测 SecurityContextHolder 中是否存在 Authentication 对象,若是不存在为其提供一个匿名 Authentication。
SessionManagementFilter:管理 session 的过滤器
ExceptionTranslationFilter:处理 AccessDeniedException 和 AuthenticationException 异常。
FilterSecurityInterceptor:能够看作过滤器链的出口。
RememberMeAuthenticationFilter:当用户没有登陆而直接访问资源时, 从 cookie 里找出用户的信息, 若是 Spring Security 可以识别出用户提供的remember me cookie, 用户将没必要填写用户名和密码, 而是直接登陆进入系统,该过滤器默认不开启。 ---------------------