Войдите в систему программно через JAAS
Я пытаюсь запустить код в JBoss Container под другой аутентификацией, программно входя в систему таким пользователем (обработка исключенных исключений):
LoginContext ctx = ctx =
new LoginContext("MyLoginSchema",
new UsernamePasswordCallbackHandler("newuser", "")
);
ctx.login();
Subject.doAs(ctx.getSubject(), new PrivilegedAction<T>() {
@Override
public T run() {
Subject.getSubject(AccessController.getContext());
InitialContext ic = new InitialContext();
EJBContext sctxLookup = (EJBContext) ic.lookup("java:comp/EJBContext");
Principal principal = sctxLookup.getCallerPrincipal();
}
});
Логин newuser
работает (Call of LoginModule
был успешным) но Subject.doAs()
не связывает новый предмет с EJBContext
, Код в run()
-Метод все еще выбирает основную часть старого пользователя из EJBContext
,
Я проверил другой метод восстановления вошедшего в систему пользователя, но такое же поведение здесь:
Subject caller = (Subject) PolicyContext.getContext("javax.security.auth.Subject.container");
Есть идеи?
2 ответа
Который LoginModule
ты сейчас используешь? В JBoss 6.1 вам пришлось использовать ClientLoginModule
аутентифицироваться в контейнере.
Насколько я понимаю, это в настоящее время не поддерживается JBoss AS 7.1. Смотрите эту тему
редактировать
То, что я здесь написал, неверно, тема относится только к входу на стороне клиента (вне JBoss).