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

时间:2015-05-12 11:04:19

标签: jboss jboss6.x jaas java-security

我将JBoss EAP 6.4用于我的企业应用程序,当我尝试检索活动主题时,我有点卡住了。

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

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

这样做很好(并填写了主题),但问题出在我尝试在执行的稍后时间检索主题时...

subject

...其中String test = "hello my name is mario"; String result = ""; int c = 1; for (int i = 0; i < test.length(); i++) { if (c++==5) { result += "X"; c = 1; } else { result += test.charAt(i); } } System.out.println("result = " + result); 仍然为空!

我错过了什么?

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

<强>解决!

感谢关于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());

那就是它!我希望它也可以为你们工作。