我有一些关于Spring Security 3.0.5和SecurityContext的问题。首先,我将尝试总结一下我所知道的:
现在我的问题...
->两个请求:SecurityContext-instance将被共享
这是如何运作的?我的意思是,SecurityContextHolder为每个请求使用ThreadLocal。
2个请求= 2个ThreadLocals
每个请求都执行以下操作:HttpSession中的getSessionAttribute(SecurityContext)
如果它们在SecurityContext上工作会怎样?是否在所有ThreadLocals中都更改了SecurityContext?
据我所知:是的(??)
这是如何运作的?它们如何在同一实例上工作?我的意思是,我真的无法想象具有两个不同ThreadLocals的两个不同线程如何在同一个实例上工作?
我的意思是,就这样:复制!也许我错了,并且两个线程不能在同一个SecurityContext上工作吗?但是Spring Security Documentation是这样说的!
如果有人可以向我解释这一点,那就太好了:-)谢谢!
最佳答案
每个线程都有自己的ThreadLocal
值,但是没有什么可以阻止这些值相等。因此,在这种情况下,多个线程将具有对SecurityContext
的同一实例的引用。
通常这不是问题,但是如果您想修改安全性上下文,则可以启用防御性复制,请参见SEC-356。