我有一些关于 Spring Security 3.0.5 和 SecurityContext 的问题。首先,我将尝试总结我所知道的:
现在我的问题....
--> 两个请求:SecurityContext-instance 将被共享
这是如何运作的?我的意思是,SecurityContextHolder 为每个请求使用 ThreadLocal。
2 请求 = 2 ThreadLocals
每个请求都执行:getSessionAttribute (SecurityContext) from HttpSession
如果它们在 SecurityContext 上工作会发生什么?所有 ThreadLocals 中的 SecurityContext 是否已更改?
据我所知:是的(??)
这是如何运作的?它们如何在同一个实例上工作?我的意思是,我真的无法想象具有两个不同 ThreadLocals 的两个不同线程如何在同一个实例上工作?
API (ThreadLocal): This class provides thread-local variables. These variables differ from their normal counterparts in that each thread that accesses one (via its get or set method) has its own, independently initialized copy of the variable.
我的意思是,就是这样:复制!也许我错了,两个线程不可能在同一个 SecurityContext 上工作?但是 Spring Security 文档是这么说的!
如果有人能向我解释,那就太好了:-) 谢谢!
最佳答案
每个线程都有自己的值 ThreadLocal
,但没有什么能阻止这些值相等。因此,在这种情况下,多个线程将引用 SecurityContext
的同一实例。 .
通常这不是问题,但如果你想修改安全上下文,你可以启用防御性复制,见SEC-356 .
关于multithreading - Spring Security : same SecurityContext-instance in multiple ThreadLocals, 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6376320/