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