spring - 什么是负责在 Spring Security 中将身份验证对象保存在安全上下文中的过滤器
问题描述
据我所知,大多数身份验证过滤器都扩展AbstractAuthenticationProcessingFilter
并覆盖了在方法attemptAuthentication
中调用的dofilter
方法,但我看不到authentication
对象是如何放置的,securitycontext
因为sessionstrategy
inabstractauthenticationprocessinfilter
设置为NullAuthenticatedSessionStrategy
在方法中没有做任何事情,onAuthentication
所以安全性究竟是如何工作的
解决方案
你说的对。AbstractAuthenticationProcessingFilter
负责放置Authentication
到 .它是在successfulAuthentication()SecurityContext
内部完成的。它的 javadoc 也说明了这样的行为:
成功认证的默认行为。
- 在 SecurityContextHolder 上设置成功的 Authentication 对象
- 通知配置的 RememberMeServices 登录成功
- 通过配置的 ApplicationEventPublisher 触发 InteractiveAuthenticationSuccessEvent
- 将其他行为委托给 AuthenticationSuccessHandler。
SessionAuthenticationStrategy
您提到的(默认设置为)NullAuthenticatedSessionStrategy
用于在发生身份验证时插入其他与 HttpSession 相关的行为,例如确保会话存在或防止会话固定攻击。默认行为(即successAuthentication())将始终运行,无论其设置为何种策略。
推荐阅读
- c# - 如何在 iTextSharp 中添加卢比符号作为前缀?
- spring - 无法模拟 connection.prepareCall 方法
- angular - 如何摆脱警告将原始 CLI 选项传递给“新服务器(配置,完成)”已被弃用
- ruby - 已确认的消息正在重试
- c++ - 使用 Json 库时出错:ld: symbol(s) not found for architecture x86_64
- javascript - 了解引用同一对象中其他属性的 JavaScript 对象属性(函数)
- parse-platform - 设备令牌未从解析 android 在 Google Playstore 应用程序中更新,但在调试时它正在工作
- node.js - 如何在foreach循环中等待异步函数
- node.js - heroku error 错误 R10(启动超时)-> Web 进程在启动后 60 秒内无法绑定到 $PORT
- python - Visual Studio Code 上的 Coverage-Gutter