我不明白一件事。例如,如果5个用户登录您的应用程序,那么Spring安全性会创建5个不同的上下文?我对春天的背景感到困惑。
spring中的所有组件都是Singleton(默认情况下)。因此,如果我创建一个组件,并且两个不同的经过身份验证的用户正在处理此组件,那么他们正在处理相同的数据?
答案 0 :(得分:2)
SecurityContext
保留在SecurityContextHolder
中,并使用线程本地策略。这意味着SecurityContext
将作用于一个线程。
在Spring MVC应用程序中,每个请求都在自己的线程中运行。 Spring Security(特别是SecurityContextPersistenceFilter
)使用HTTP会话中找到的SecurityContextHolder
填充SecurityContext
(如果已存在)。
因此,如果您的应用程序中有五个用户登录,则会存在五个安全上下文,但只有属于发出请求的用户的一个安全上下文才能从处理请求的线程中获得。
对于问题的第二部分,是的,多个用户将使用您的单例作用域bean的相同实例。但我不确定这是一个问题。您的单例bean可能是服务,DAO等,您可能不会将状态存储在可由用户直接更改的状态。
希望这篇简短而简化的帖子解释了它,如果不发表评论,我会添加更多细节。
更多信息: