gpt4 book ai didi

multithreading - Spring Security : same SecurityContext-instance in multiple ThreadLocals, 是如何工作的?

转载 作者:行者123 更新时间:2023-12-01 04:10:48 28 4
gpt4 key购买 nike

我有一些关于 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

    每个请求都执行: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/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com