Spring安全上下文,几个用户



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

弹簧中的所有零部件都是Singleton(默认情况下)。那么,如果我创建了一个组件,而两个不同的经过身份验证的用户正在处理这个组件,那么他们正在处理相同的数据?

SecurityContext默认保存在SecurityContextHolder中,并使用线程本地策略。这意味着SecurityContext的作用域将是一个线程。

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

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

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

希望这篇简短的帖子能解释清楚,如果不留下评论,我会补充更多细节。

更多信息:

  • SecurityContextPersistenceFilter JavaDoc

最新更新