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());
就是这样!我希望它也对你们有用。
我正在为我的企业应用程序使用 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());
就是这样!我希望它也对你们有用。