【发布时间】:2025-11-25 17:55:01
【问题描述】:
我有一个委托,它通过 InitialContext as shown here 实例化相应的 Bean 发送凭据(Josso 身份验证)。
在Bean,我尝试过用SessionContext恢复Josso Data,如下图:
@Resource private SessionContext context;
我面临的问题是我无法在 Bean 范围内检索 Josso 数据。我已经尝试过“context.getEnvironment()”,但这种方法已被弃用,我没有找到任何替代方法。
为了找到解决办法,我试过了:
context.lookup(JNDI_BEAN_NAME);
context.lookup("java:comp/env/JNDI_BEAN_NAME")
context.lookup("java:comp/env")
但是前两个命令只返回 Bean 本身,最后一个只返回全局变量。
“context.getEnvironment()”的正确替代方法是什么?
【问题讨论】:
-
您认为
context.getEnvironment()过去会返回什么?它是一个 EJB 1.0 API,在 EJB 1.1 中已被弃用。它已替换为 ejb-jar.xml 部署描述符中的<env-entry>元素 -
您将无法恢复“凭据”,但是您可以通过注入安全主体:
@Resource java.security.Principal principal或通过 SessionContext.getCallerPrincipal() 来获取经过身份验证的用户身份。 -
我的 EJB 配置不包括 ejb-jar.xml。关于您的建议,我也可以通过 SessionContext 恢复密码或 jossoId 吗?我需要这个有一个经过身份验证的 bean
-
我有一个过滤器,当时我拥有所有这些信息(用户、密码、jossoid),并且我在会话中添加了这些属性。我的 Bean 上至少需要 JossoId。有什么建议吗?
-
如果您已将 Josso 与您的应用程序服务器正确集成,安全上下文将从您的 Web 应用程序传播到您的 EJB 和其他托管 bean。
标签: java ejb cdi initial-context josso