Spring安全上下文,多个用户

use*_*733 3 spring spring-security

我不明白一件事。例如,如果 5 个用户登录您的应用程序,那么 spring security 创建 5 个不同的上下文?我对春天的背景有点困惑。

spring中的所有组件都是单例的(默认情况下)。那么,如果我创建一个组件,并且两个不同的经过身份验证的用户正在处理该组件,那么他们正在处理相同的数据?

Boh*_*rdt 7

SecurityContextSecurityContextHolder默认情况下与线程局部策略保持一致。这意味着SecurityContext它将被限制在一个线程内。

在 Spring MVC 应用程序中,每个请求都在其自己的线程中运行。Spring Security(SecurityContextPersistenceFilter特别是)用 HTTP 会话中找到的SecurityContextHolder内容填充SecurityContext(如果已经存在)。

因此,如果有五个用户登录您的应用程序,则将存在五个安全上下文,但处理请求的线程只能使用属于发出请求的用户的安全上下文。

对于问题的第二部分,是的,多个用户将使用单例作用域 bean 的相同实例。但我不确定这是一个问题。您的单例 bean 可能是服务、DAO 等,并且您可能不会在用户可以直接更改的那些上存储状态。

希望这篇简短而简化的文章能够解释它,如果没有发表评论,我将添加更多详细信息。

更多信息: