Использование HTTP Request.login с JBoss / JAAS - PullRequest
2 голосов
/ 06 июля 2011

Я успешно настроил домен безопасности JBoss и могу аутентифицироваться с помощью BASIC-аутентификации (как определено в web.xml).Это все хорошо работает.Однако я не могу понять, как использовать метод http request.login.

Следующий домен безопасности (из jboss-web.xml) работает для BASIC-аутентификации:

<jboss-web>  
    <context-root>/myapp</context-root>  
    <security-domain>java:/jaas/myapp-realm</security-domain>  
</jboss-web> 

Но когда яиспользуйте request.login следующим образом:

public void login() {
    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
    try {
        request.login(username, password);
    }
    catch (ServletException ex) {
        java.util.logging.Logger.getLogger(UserLogin.class.getName()).log(Level.SEVERE, null, ex);
    }
}

Я получаю следующее исключение:

javax.servlet.ServletException: Failed to authenticate a principal

Я знаю, что имя пользователя / пароль в порядке (оно работало с использованием BASIC-аутентификации).У меня есть уровень входа TRACE, и он даже не пытается аутентифицироваться.Что я пропустил?

См. http://java -web-development.blogspot.com / 2011/07 / jee-6-security-part-two-creation.html , если вам нужноподробнее о моей настройке / конфигурации.Я использую JBoss 6.

1 Ответ

5 голосов
/ 09 июля 2011

Сейчас работает.Я убедился, что аутентификация на основе FORM работает, и как только она сработала, я вернулся к использованию request.login, и это сработало ?!Я использую горячее развертывание через JRebel, поэтому есть вероятность, что я прошел аутентификацию с помощью BASIC auth, и это оставило пользователя в моей сессии, что затем привело к сбою request.login (request.login выдает исключение, если вы уже прошли аутентификацию).Клянусь, я сделал жесткий перезапуск JBoss, но это единственная логическая вещь, о которой я могу подумать.

Теперь у меня есть проверка работоспособности при входе в систему, например:

public void login() {
    FacesContext context = FacesContext.getCurrentInstance();
    HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
    try {
        Principal userPrincipal = request.getUserPrincipal();
        if (request.getUserPrincipal() != null) {
            request.logout();
        }
        request.login(username, password);
        userPrincipal = request.getUserPrincipal();
        authUser = userDao.findByLogin(userPrincipal.getName());
    }
    catch (ServletException ex) {
        java.util.logging.Logger.getLogger(UserLogin.class.getName()).log(Level.SEVERE, null, ex);
    }
...