首页 > 解决方案 > 什么是负责在 Spring Security 中将身份验证对象保存在安全上下文中的过滤器

问题描述

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

标签: springspring-bootspring-mvcspring-security

解决方案


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

成功认证的默认行为。

  1. 在 SecurityContextHolder 上设置成功的 Authentication 对象
  2. 通知配置的 RememberMeServices 登录成功
  3. 通过配置的 ApplicationEventPublisher 触发 InteractiveAuthenticationSuccessEvent
  4. 将其他行为委托给 AuthenticationSuccessHandler。

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


推荐阅读