Spring Security 过滤器自定义登录

Spring Security所有过滤器及顺序

  1. ChannelProcessingFilter:使用https还是http的通过过滤器

  2. WebAsyncManagerIntegrationFilter:此过滤器使得WebAsync异步线程能够获取到当前认证信息

  3. SecurityContextPersistenceFilter:主要控制 SecurityContext 的在一次请求中的生命周期,请求结束时清空,防止内存泄漏

  4. HeaderWriterFilter:请求头过滤器

  5. CorsFilter:跨域过滤器

  6. CsrfFilter:csrf过滤器

  7. LogoutFilter:登出过滤器

  8. OAuth2AuthorizationRequestRedirectFilter:Oauth2请求鉴权重定向过滤器,需配合OAuth2.0的模块使用

  9. Saml2WebSsoAuthenticationRequestFilter:Saml2单点认证过滤器 需配合Spring Security SAML模块使用

  10. X509AuthenticationFilter:X.509证书认证过滤器

  11. AbstractPreAuthenticatedProcessingFilter:处理经过预先认证的身份验证请求的过滤器的基类

  12. CasAuthenticationFilter:CAS 单点登录认证过滤器 。配合Spring Security CAS模块使用

  13. OAuth2LoginAuthenticationFilter:OAuth2 登录认证过滤器
    Saml2WebSsoAuthenticationFilter:SMAL 的 SSO 单点登录认证过滤器

  14. UsernamePasswordAuthenticationFilter:用户名密码认证过滤器

  15. OpenIDAuthenticationFilter:OpenID认证过滤器

  16. DefaultLoginPageGeneratingFilter:默认登入页生成过滤器

  17. DefaultLogoutPageGeneratingFilter:默认登出页生成过滤器

  18. ConcurrentSessionFilter:session管理,用于判断session是否过期

  19. DigestAuthenticationFilter:摘要认证过滤器

  20. BearerTokenAuthenticationFilter:Bearer标准token认证过滤器

  21. BasicAuthenticationFilter:Http Basic标准认证过滤器

  22. RequestCacheAwareFilter:请求缓存过滤器,主要作用是认证完成后恢复认证前的请求继续执行

  23. SecurityContextHolderAwareRequestFilter:对request包装的目的主要是实现servlet api的一些接口方法isUserInRole、getRemoteUser

  24. JaasApiIntegrationFilter:Jaas认证过滤器

  25. RememberMeAuthenticationFilter:RememberMe 认证过滤器

  26. AnonymousAuthenticationFilter:匿名认证过滤器

  27. OAuth2AuthorizationCodeGrantFilter:OAuth2授权码过滤器

  28. SessionManagementFilter:Session 管理器过滤器,内部维护了一个SessionAuthenticationStrategy 用于管理 Session

  29. ExceptionTranslationFilter:异常翻译过滤器

  30. FilterSecurityInterceptor:请求鉴权过滤器

  31. SwitchUserFilter:账户切换过滤器

自定义过滤器登录思路

  1. 在SpringSecurity登录之前增加一个过滤器拿到账号密码,然后设置到SpringSecurity的request parameter中:不推荐

  2. 继承:AbstractAuthenticationProcessingFilter,或者UsernamePasswordAuthenticationFilter,在SecurityConfig中配置如下,这种方式属于替换SpringSecurity默认的登录过滤器:推荐

http.addFilterAt(loginAuthenticationFilter(), UsernamePasswordAuthenticationFilter.class);