@Provider
@ServerInterceptor
public class AuthInterceptor implements PreProcessInterceptor {...}
我已经构建了上面的拦截器,其中:
这样做的原因是让用户的信息可用于所有正在进行的Session bean调用(使用@Inject注释)。
这是有效的,但是有些情况(例如在@Asynchronous方法调用中)CDI没有注入@RequestScoped bean(而是给出了null引用)。
我也看过使用
的例子InvocationContext.getContextData().put("user-related-data-name", someObj)
然而这似乎不起作用,在将用户数据放入地图后获取用户数据总是返回空指针。
在拦截器调用期间添加此用户信息的最佳方法是什么,以便在所有后续请求EJB调用中都可用?
提前致谢。
答案 0 :(得分:0)
如果其他人发现同样的问题,这里是我的解决方案的摘要:
我想知道是否有JavaEE方式这样做,而是我只是将上下文信息存储在线程本地而不是Request Scoped bean中。
当我分叉一个新线程时,我有一个拦截器,它接收当前上下文信息并将其存储在本地新线程中,因此用户的上下文信息可用于原始线程和新线程。 / p>
请注意,还有一些拦截器可以在不再需要时清除本地线程的值。
有关本地线程的讨论,请参阅此处:When and how should I use a ThreadLocal variable?