0

我正在为我的企业应用程序使用 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仍然为空!

我错过了什么??

任何帮助深表感谢。

4

1 回答 1

1

解决了!

感谢以下关于如何在 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());

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

于 2015-05-12T12:40:52.563 回答