gpt4 book ai didi

jersey - 为什么将 SecurityContext 注入(inject) Jersey Singleton 线程是安全的?

转载 作者:行者123 更新时间:2023-12-05 00:15:10 35 4
gpt4 key购买 nike

在 Jersey 的文档中,Example 16.2显示了将 SecurityContext 注入(inject) Jersey 资源单例的示例。

Jersey Example 16.2

当然文档是正确的,并且给出的示例确实是线程安全的。

我怀疑 SecurityContext 的注入(inject)只发生了一次,当 getUserPrincipal()被调用,也许它从附加到线程本身的某些结构中获取用户数据(可能是 ThreadLocal 对象?)。这是当有大量线程竞争时,我可以看到将正确的用户信息提供给最终用户的唯一方法。

任何人都可以确认这种行为,或者以其他方式解释 Jersey 示例的线程安全性吗?

最佳答案

Dynamic Proxies与 ThralLocal 支持一起使用。这在 JAX-RS 规范中有所解释,关于一些请求范围的可注入(inject)对象(参见 this post for spec quote)

I suspect that the injection of the SecurityContext happens exactly once



是的,这是真的,但注入(inject)的实际上是一个代理。你可以打印出类名,你会看到它实际上是一个代理。这篇文章中的第一个链接解释了它是如何工作的。当您调用代理上的方法时,它会将调用委托(delegate)给线程本地安全上下文。

另见:
  • Dynamic Proxies and Dependency Injection .
  • 关于jersey - 为什么将 SecurityContext 注入(inject) Jersey Singleton 线程是安全的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45246344/

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