据我所知,大多数身份验证过滤器都扩展了AbstractAuthenticationProcessingFilter
并覆盖了attemptAuthentication
方法中调用的dofilter
方法,但我看不到authentication
对象的方式放置在securitycontext
中是因为sessionstrategy
中的abstractauthenticationprocessinfilter
设置为NullAuthenticatedSessionStrategy
,这在onAuthentication
方法中没有任何作用,因此安全性如何正常工作>
答案 0 :(得分:0)
你是对的。 AbstractAuthenticationProcessingFilter
负责将Authentication
放置到SecurityContext
。它是在successfulAuthentication()内部完成的。它的javadoc也声明了这种行为:
成功认证的默认行为。
- 在SecurityContextHolder上设置成功的身份验证对象
- 通知已配置的RememberMeServices成功登录
- 通过配置的ApplicationEventPublisher触发InteractiveAuthenticationSuccessEvent
- 将其他行为委派给AuthenticationSuccessHandler。
您提到的SessionAuthenticationStrategy
(默认情况下设置为NullAuthenticatedSessionStrategy
)用于在发生身份验证(例如确保会话存在或防止会话固定攻击)时插入其他与HttpSession相关的行为。无论其设置为哪种策略,默认行为(即successfulAuthentication())都将始终运行。