繁体   English   中英

Spring Security如何在跨Web应用程序请求的线程中管理SecurityContext?

[英]How does Spring Security manage SecurityContext in a thread across web application requests?

在SpringSecurity中,它有一个类名SecurityContextHolder及其规范:'将给定的SecurityContext与当前执行线程关联。 使用Web应用程序每当请求到达服务器时,Spring还会重新加载并在SecurityContextHolder中为其线程设置该请求的SecurityContext?

是的, SecurityContextPersistenceFilter会处理这个问题。 默认情况下,它会在HttpSession中找到SecurityContext,并通过SecurityContextHolder将其绑定到线程。 当请求完成处理时,它会反过来 - 它从线程获取SecurityContext并将其放入会话中。

来自Javadoc:

使用在请求之前从配置的SecurityContextRepository获取的信息填充SecurityContextHolder,并在请求完成并清除上下文持有者后将其存储回存储库。 默认情况下,它使用HttpSessionSecurityContextRepository。

使用Web应用程序每当请求到达服务器时,Spring还会重新加载并在SecurityContextHolder中为其线程设置该请求的SecurityContext?

基本上是的。

SecurityContextHolder.getInstance()的默认行为是返回一个SecurityContextHolder实例,该实例存储为当前线程的线程本地。 (这只是默认机制。您可以通过调用SecurityContextHolder.setStrategemName()来使用不同的策略来定位SecurityContextHolder

SpringSecurity过滤器确保请求的SecurityContextHolder (无论它位于何处)在开始时加载请求凭据,并在请求处理结束时清除持有者。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM