JBoss EAP 6.x - PolicyContext.getContext 保持为空

JBoss EAP 6.x - PolicyContext.getContext remains null

我正在为我的企业应用程序使用 JBoss EAP 6.4,但在尝试检索活动主题时遇到了一点困难。

当然,用户需要通过以下代码片段进行身份验证

LoginContext loginContext = new LoginContext("CONTEXTNAME", callbackHandler);
loginContext.login();
return loginContext.getSubject();

效果很好(主题已填写),但是问题出在我稍后在执行时尝试检索主题时...

final Subject subject = (Subject)PolicyContext.getContext("javax.security.auth.Subject.container");

... 其中 subject 保持为空!

我错过了什么??

非常感谢任何帮助。

已解决!

感谢 how to introduce the security manager on JBoss EAP 6.4 上的以下文章。

问题是必须在 JBoss 中配置安全管理器。您需要打开 standalone.conf(或 standalone.conf.bat),取消注释并添加以下内容:

rem # Uncomment this to run with a security manager enabled
set "SECMGR=true"

rem # Using == when setting -Djava.security.policy specifies that the security manager 
rem # will use only the specified policy file. Using = specifies that the security 
rem # manager will use the specified policy combined with the policy set in the policy.url 
rem # section of JAVA_HOME/lib/security/java.security.
set "JAVA_OPTS=%JAVA_OPTS% -Djava.security.policy==%JBOSS_HOME%\bin\server.policy"

这将启用安全管理器并使其指向自定义 server.policy,我有以下示例:

grant {
  permission java.security.AllPermission;
};

这将授予任何模块运行的所有权限。当然,如果你想加强安全性,你需要编辑策略文件。

检索 Subject 也很简单:

Subject.getSubject(AccessController.getContext());

就是这样!我希望它也对你们有用。