Сервлет аутентификации Tomcat и Jaas в форме безопасности на основе форм

У меня есть требование по безопасности, которое покрывает некоторые страницы моего веб-приложения. Аутентификация выполняется с помощью JAAS и формы, и она работает нормально. (Я успешно реализовал мой LoginModule).

Однако мне нужна альтернативная аутентификация через сервлет.

Это код сервлета:

try {
    TokenCallbackHandler tokenCallbackHandler = new TokenCallbackHandler(properties,token);

    LoginContext lc = new LoginContext("myApp", tokenCallbackHandler);
    lc.login();
} catch (LoginException e) {
    e.printStackTrace();
}

Отладка кода Я увидел, что initialize, login и commit были вызваны без ошибок. Сервлет возвращает html-страницу с js, которая перенаправляет на защищенный ресурс:

function doRedirect() {
    location.href = "/protectedPath/ProtectedResource.html";
}
window.setTimeout("doRedirect()", 1);

Но когда браузер пытается получить защищенную страницу, сервер приложений возвращается на страницу входа.

Чего мне не хватает? Возможно, что с редиректом js я теряю cookie сессии? Или, возможно, проблема в том, что я пытаюсь получить доступ (через перенаправление) к защищенному ресурсу с незащищенного ресурса?

-- РЕДАКТИРОВАТЬ ---

Я посмотрел на куки: когда я захожу с сервлетом, он возвращает сессионный куки, и когда я пытаюсь получить защищенный ресурс, я вижу, как браузер передает этот сессионный куки на сервер, но кажется, что он получил отказ на самом деле он отвечает другим сессионным куки, переходя на страницу формы входа

-- РЕДАКТИРОВАТЬ ---

Решено по-другому.

После некоторого исследования механизма аутентификации tomcat я понял, что то, что я пытался сделать, было что-то не так.

Определив ограничение безопасности и конфигурацию входа в систему для защиты моих ресурсов, я велел tomcat управлять аутентификацией по-своему. Так что, пока я не прошел через рабочий процесс аутентификации tomcat, я не могу ничего аутентифицировать. Также я обнаружил, что невозможно настроить другую конфигурацию входа в систему в одном и том же веб-приложении, поэтому определение аутентификации по форме не позволяет мне проходить аутентификацию другим способом. Вероятно, мне понадобятся пользовательские реализации класса BaseAuthenticator (базовый класс для FormAuthenticator, BasicAuthenticator и т. Д., Содержащий код для соответствующей конфигурации входа в систему), но я не уверен, что это может быть хорошей идеей, может быть, фильтр безопасности будет лучшим решением.

Зная что-то о фильтрах безопасности в tomcat, мне временно удалось решить мою проблему с имитацией проверки подлинности формы в моем сервлете (я знаю, что это ужасно).

1 ответ

Если вы хотите серьезно работать с управлением аутентификацией и авторизацией, вам следует рассмотреть возможность использования хорошо зарекомендовавшей себя инфраструктуры, такой как Apache Shiro или Spring Security. Последнее, по крайней мере, допускает параллельные схемы аутентификации (базовый http и форма входа в систему по умолчанию, но возможны многие другие)

Другие вопросы по тегам