@Provider
@ServerInterceptor
public class AuthInterceptor implements PreProcessInterceptor {...}
我已经构建了上面的拦截器,它:
- 从 HttpServletRequest 的标头字段中检索用户的 ID。
- 使用用户 ID 从数据库加载用户实体。
- 将来自实体的用户信息(名字/dob/等)存储在 @RequestScoped CDI bean 中。
这样做的原因是让用户信息可用于所有正在进行的 Session bean 调用(使用 @Inject 注释)。
这可行,但是在某些情况下(例如在@Asynchronous 方法调用中),CDI 不注入@RequestScoped bean(而是给出了空引用)。
我也看过使用的例子
InvocationContext.getContextData().put("user-related-data-name", someObj)
但是这似乎不起作用,在将用户数据放入地图后获取用户数据总是返回一个空指针。
在拦截器调用期间添加此用户信息以便在所有后续请求 EJB 调用中都可用的最佳方法是什么?
提前致谢。