【问题标题】:Why is injecting a SecurityContext into a Jersey Singleton thread safe?为什么将 SecurityContext 注入 Jersey Singleton 线程是安全的?
【发布时间】:2017-07-21 20:36:45
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: jersey thread-safety


    【解决方案1】:

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

    我怀疑 SecurityContext 的注入只发生了一次

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

    另请参阅:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-30
      • 1970-01-01
      • 2012-11-20
      • 2013-10-11
      • 2020-10-10
      • 1970-01-01
      相关资源
      最近更新 更多