为什么将SecurityContext注入Jersey Singleton线程是安全的?

为什么将SecurityContext注入Jersey Singleton线程是安全的?,jersey,thread-safety,Jersey,Thread Safety,在Jersey文档中,显示了将SecurityContext注入Jersey资源单例的示例 当然文档是正确的,并且给出的示例确实是线程安全的 我怀疑SecurityContext的注入只发生一次,当调用getUserPrincipal()时,它可能从附加到线程本身的某个结构(可能是ThreadLocal对象?)中提取用户数据。这是当有大量线程竞争时,我能看到向最终用户提供正确用户信息的唯一方法 有人能确认这一行为吗,或者以其他方式解释Jersey示例的线程安全性吗?与ThrealLocal支持

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

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

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

有人能确认这一行为吗,或者以其他方式解释Jersey示例的线程安全性吗?

与ThrealLocal支持一起使用。这在JAX-RS规范中有点解释,涉及一些请求范围的可注入对象(请参阅)

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

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

另请参见: