EJB 3.1为安全目的删除调用上下文(ThreadLocal,...)

时间:2011-10-03 14:43:26

标签: java java-ee ejb-3.1

我在另一个Glassfish服务器上的一个Glassfish服务器(前端)和一个EJB 3.1应用程序(后端)上有一个webapp。 webapp通过远程调用与EJB 3.1进行通信。

我想传递上下文数据(即用户数据),而不必将其定义为每个业务操作的输入参数。

我有一个想法,但不确定它是否会奏效:使用 ThreadLocal 来存储数据,但 ThreadLocal 只能在一台服务器上使用(意味着JVM) =>使用 InvocationContext 对象并创建拦截器以将用户数据添加到 ContextData 地图。

你怎么看?任何其他想法都非常欢迎! ; - )

更新

在第一次回答后,我用Google搜索了一下,发现了注释 @CallerPrincipal

如何在远程调用之前设置此对象?

1 个答案:

答案 0 :(得分:2)

容器已经处理过了,所以你不必自己编写代码。

在您的EJB中,您可以访问EJBContext,它具有getCallerPrincipal()方法,可以为您提供呼叫者身份。