Jakarta ee 在JAX-RS(RestEasy)调用期间添加上下文信息(firstname/lastname)

Jakarta ee 在JAX-RS(RestEasy)调用期间添加上下文信息(firstname/lastname),jakarta-ee,ejb,jax-rs,cdi,resteasy,Jakarta Ee,Ejb,Jax Rs,Cdi,Resteasy,我已经构建了上述拦截器,它: 从HttpServletRequest中的标头字段检索用户id 使用用户ID从数据库加载用户实体 将实体中的用户信息(名字/dob/etc)存储在@RequestScoped cdibean中 这样做的原因是让用户的信息可用于所有正在进行的会话bean调用(使用@Inject注释) 这是可行的,但是在某些情况下(例如在@Asynchronous方法调用中),CDI没有注入@RequestScoped bean(而是提供了一个空引用) 我还看到了使用 @Provide

我已经构建了上述拦截器,它:

  • 从HttpServletRequest中的标头字段检索用户id
  • 使用用户ID从数据库加载用户实体
  • 将实体中的用户信息(名字/dob/etc)存储在@RequestScoped cdibean中
  • 这样做的原因是让用户的信息可用于所有正在进行的会话bean调用(使用@Inject注释)

    这是可行的,但是在某些情况下(例如在@Asynchronous方法调用中),CDI没有注入@RequestScoped bean(而是提供了一个空引用)

    我还看到了使用

    @Provider
    @ServerInterceptor
    public class AuthInterceptor implements PreProcessInterceptor {...}
    
    但是,这似乎不起作用,在将用户数据放入映射后获取该数据总是返回空指针

    在拦截器调用期间添加此用户信息以便在所有后续请求EJB调用中都可用的最佳方法是什么


    提前感谢。

    如果其他人发现同样的问题,以下是我的解决方案摘要:

    我想看看是否有一种JavaEE方法可以做到这一点,但我只是将上下文信息存储在线程本地而不是请求范围的bean中

    当我分叉一个新线程时,我有一个拦截器,它获取当前上下文信息并将其存储在新线程本地,因此用户的上下文信息对原始线程和新线程都可用

    请注意,还有一些拦截器,它们在不再需要线程本地值时清除这些值

    有关线程本地的讨论,请参见此处:

    InvocationContext.getContextData().put("user-related-data-name", someObj)