我有一些关于 Spring Security 3.0.5 和 SecurityContext 的问题。首先,我试着总结一下我所知道的:
- SecurityContextHolder 存储 SecurityContext
- Request之间,SecurityContext存储在HttpSession中
- 请求开始:SecurityContextHolder 从 HttpSession 获取 SecurityContext
请求结束:SecurityContextHolder 将 SecurityContext 放入 HttpSession
在请求期间,在服务器上,SecurityContextHolder 使用 ThreadLocal。在应用程序的任何地方(相同的请求),都可以访问 SecurityContext
现在我的问题....
--> 两个请求:SecurityContext-instance 将被共享
这是如何运作的?我的意思是,SecurityContextHolder 对每个请求都使用 ThreadLocal。2 请求 = 2 ThreadLocals
每个请求都会: 从 HttpSession 中获取会话属性 (SecurityContext) 如果它们在 SecurityContext 上工作会发生什么?所有 ThreadLocals 中的 SecurityContext 是否都发生了变化?
据我所知:是的(??)
这是如何运作的?它们如何在同一个实例上工作?我的意思是,我真的无法想象具有两个不同 ThreadLocals 的两个不同线程如何在同一个实例上工作?
API (ThreadLocal):此类提供线程局部变量。这些变量不同于它们的正常对应变量,因为每个访问一个(通过它的 get 或 set 方法)的线程都有它自己的、独立初始化的变量副本。
我的意思是,就是这样:复制!也许我错了,两个线程不可能在同一个SecurityContext上工作?但是 Spring Security 文档是这么说的!
如果有人能向我解释一下就好了:-)谢谢!