Spring Security中负责将身份验证对象保留在安全上下文中的过滤器是什么

时间:2019-02-24 04:32:18

标签: spring spring-boot spring-mvc spring-security

据我所知,大多数身份验证过滤器都扩展了AbstractAuthenticationProcessingFilter并覆盖了attemptAuthentication方法中调用的dofilter方法,但我看不到authentication对象的方式放置在securitycontext中是因为sessionstrategy中的abstractauthenticationprocessinfilter设置为NullAuthenticatedSessionStrategy,这在onAuthentication方法中没有任何作用,因此安全性如何正常工作

1 个答案:

答案 0 :(得分:0)

你是对的。 AbstractAuthenticationProcessingFilter负责将Authentication放置到SecurityContext。它是在successfulAuthentication()内部完成的。它的javadoc也声明了这种行为:

  

成功认证的默认行为。

     
      
  1. 在SecurityContextHolder上设置成功的身份验证对象
  2.   
  3. 通知已配置的RememberMeServices成功登录
  4.   
  5. 通过配置的ApplicationEventPublisher触发InteractiveAuthenticationSuccessEvent
  6.   
  7. 将其他行为委派给AuthenticationSuccessHandler。
  8.   

您提到的SessionAuthenticationStrategy(默认情况下设置为NullAuthenticatedSessionStrategy)用于在发生身份验证(例如确保会话存在或防止会话固定攻击)时插入其他与HttpSession相关的行为。无论其设置为哪种策略,默认行为(即successfulAuthentication())都将始终运行。