Java EJB3.1出于安全目的删除调用上下文(ThreadLocal,…)
我在一台Glassfish服务器(前端)上有一个webapp,在另一台Glassfish服务器上有一个EJB3.1应用(后端)。webapp通过远程调用与EJB3.1通信 我希望传递上下文数据(即用户数据),而不必将其定义为每个业务操作的输入参数 我有一个想法,但不确定它是否有效:使用ThreadLocal存储数据,但是ThreadLocal只能在一台服务器上使用(意味着JVM)=>使用InvocationContext对象并创建拦截器将用户数据添加到ContextData映射中 你觉得怎么样?任何其他想法都非常受欢迎!;-) 更新 在第一次回答之后,我在谷歌上搜索了一下,找到了注释@CallerPrincipalJava 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映射中 你觉得怎么样?
如何在远程调用之前设置此对象?容器将已经处理此问题,因此您不必自己编写代码
在EJB中,您可以访问EJBContext,它有一个方法可以为您提供调用者身份。非常感谢您的回答。但是我如何将被调用主体“设置”为EJBContext呢?如果不设置,它将由您在web应用程序中使用的任何身份验证机制设置。登录后,容器将传递标识。