我正在从 JBoss EAP 6.4 升级到 7.1,但我遇到了一些关于主题管理的技术问题。
一些上下文
我的应用程序是一个 EAR 文件,其中包含:
- 一个网络模块
- 几个带有无状态会话 bean (SLSB) 的 EJB 模块
- 一个打包以上所有内容的EAR文件
身份验证是原始的:用户名-密码凭证被传递到 SLSB 之一,SLSB 依次调用
LoginContext loginContext = new LoginContext(group.getLoginContextName(), callbackHandler);
loginContext.login();
问题
我的应用程序偶尔会在不同的执行点检索主题——从我的 Web 应用程序、我的 EJB 或任何地方。我通常习惯使用Subject.getSubject(...)
,但这一直返回 null 。
我被要求使用PolicyContext.getContext("javax.security.auth.Subject.container")
它,它确实返回了经过身份验证的主题,但只在loginContext.login();
被调用的地方。当我从其他任何地方(包括从同类型的不同 SLSB 实例)调用它的那一刻,主题为空!
我错过了什么??