我有一些关于 Spring Security 3.0.5 和 SecurityContext 的问题。首先,我尝试总结一下我所知道的:
现在我的问题....
--> 两个请求:SecurityContext 实例将被共享
这是如何运作的?我的意思是,SecurityContextHolder 对每个请求使用 ThreadLocal。
2 个请求 = 2 个 ThreadLocal
每个请求都会:从 HttpSession 获取SessionAttribute (SecurityContext)
如果他们在 SecurityContext 上工作会发生什么?所有 ThreadLocal 中的 SecurityContext 是否都发生了变化?
据我所知:是的(?)
这是如何运作的?他们如何在同一个实例上工作?我的意思是,我真的无法想象具有两个不同 ThreadLocal 的两个不同线程如何在同一个实例上工作?
API(线程本地):
该类提供线程局部变量。这些变量与其正常对应变量的不同之处在于,访问一个变量(通过其 get 或 set 方法)的每个线程都有其自己的、独立初始化的变量副本。
我的意思是,就是这样:复制!也许我错了,两个线程不可能在同一个 SecurityContext 上工作?但 Spring Security 文档是这么说的!
如果有人能向我解释这一点那就太好了:-) 谢谢!
每个线程都有自己的值ThreadLocal
,但没有什么可以阻止这些值相等。因此,在这种情况下,多个线程将引用同一个实例SecurityContext
.
通常这不是问题,但如果你想修改安全上下文,你可以启用防御性复制,请参阅SEC-356 https://jira.springsource.org/browse/SEC-356.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)