Java EJB3.1出于安全目的删除调用上下文(ThreadLocal,…)

Java EJB3.1出于安全目的删除调用上下文(ThreadLocal,…),java,jakarta-ee,ejb-3.1,Java,Jakarta Ee,Ejb 3.1,我在一台Glassfish服务器(前端)上有一个webapp,在另一台Glassfish服务器上有一个EJB3.1应用(后端)。webapp通过远程调用与EJB3.1通信 我希望传递上下文数据(即用户数据),而不必将其定义为每个业务操作的输入参数 我有一个想法,但不确定它是否有效:使用ThreadLocal存储数据,但是ThreadLocal只能在一台服务器上使用(意味着JVM)=>使用InvocationContext对象并创建拦截器将用户数据添加到ContextData映射中 你觉得怎么样?

我在一台Glassfish服务器(前端)上有一个webapp,在另一台Glassfish服务器上有一个EJB3.1应用(后端)。webapp通过远程调用与EJB3.1通信

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

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

你觉得怎么样?任何其他想法都非常受欢迎!;-)

更新

在第一次回答之后,我在谷歌上搜索了一下,找到了注释@CallerPrincipal


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

容器将已经处理此问题,因此您不必自己编写代码


在EJB中,您可以访问EJBContext,它有一个方法可以为您提供调用者身份。

非常感谢您的回答。但是我如何将被调用主体“设置”为EJBContext呢?如果不设置,它将由您在web应用程序中使用的任何身份验证机制设置。登录后,容器将传递标识。