JBoss EAP 6.x - PolicyContext.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
остается нулевым!
Что мне не хватает??
Буду признателен за любую оказанную помощь.
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());
Это оно! Надеюсь, это сработает и для вас, ребята.