Стандартные проверки подлинности Java Сервлеты

Каков стандартный способ аутентификации формы с помощью сервлетов Java?

С тех пор я реализовал сам, используя простую форму POST HTML:

  • проверка отправленных параметров по базе данных
  • если присутствует, сохраните объект User в HttpSession
  • проверяет каждый сервлет, присутствует ли этот объект
  • if not: перенаправить на страницу входа с сообщением об ошибке

Но теперь я наткнулся на Как настроить безопасность с помощью встроенного Jetty, и теперь я думаю о том, что я могу повторно использовать уже реализованные решения этой проблемы, но то, что стандартный подход здесь? Я сам использую Jetty, но как насчет Tomcat или других веб-серверов?

Я также читал о j_security_check, что с этим? Это унаследованный метод?

Ответ 1

Вы должны использовать защиту JAAS, предоставляемую контейнерами Servlet, такими как Tomcat, Websphere, Glassfish.

По умолчанию эти контейнеры поддерживают эти типы проверки подлинности:

  • BASIC
  • ДАЙДЖЕСТ
  • FORM
  • CLIENT-CERT

Основная аутентификация HTTP

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

Обычная проверка подлинности является по умолчанию, если вы не указали механизм аутентификации.

Когда используется базовая аутентификация, выполняются следующие действия:

  • Клиент запрашивает доступ к защищенному ресурсу.
  • Веб-сервер возвращает диалоговое окно с запросом имени пользователя и пароля.
  • Клиент отправляет на сервер имя пользователя и пароль. 4.\Сервер аутентифицирует пользователя в указанной области и, в случае успеха, возвращает запрошенный ресурс.

На рисунке ниже показано, что происходит, когда вы указываете базовую аутентификацию HTTP. enter image description here

HTTP Basic Authentication Диаграмма четырех этапов базовой аутентификации HTTP между клиентом и сервером

Аутентификация на основе форм

Аутентификация на основе форм позволяет разработчику контролировать внешний вид экранов аутентификации входа, настраивая экран входа и страницы ошибок, которые браузер HTTP предоставляет конечному пользователю. Когда объявляется аутентификация на основе формы, выполняются следующие действия.

  • Клиент запрашивает доступ к защищенному ресурсу.
  • Если клиент не аутентифицирован, сервер перенаправляет клиент на страницу входа.
  • Клиент отправляет форму регистрации на сервер.
  • Сервер пытается аутентифицировать пользователя.
  • Если аутентификация прошла успешно, проверяется аутентифицированный пользователь, чтобы убедиться, что он принадлежит роли, которая имеет право доступа к ресурсу. Если пользователь авторизован, сервер перенаправляет клиента на ресурс, используя сохраненный путь URL.
  • Если аутентификация завершается неудачно, клиент перенаправляется или перенаправляется на страницу с ошибкой.

Ниже показано, что происходит, когда вы указываете аутентификацию на основе форм.

enter image description here

Когда вы создаете логин на основе формы, обязательно поддерживайте сеансы с использованием файлов cookie или информации сеанса SSL.

Чтобы аутентификация выполнялась надлежащим образом, действие формы входа всегда должно быть j_security_check. Это ограничение делается так, что форма входа будет работать независимо от того, для какого ресурса она предназначена, и чтобы не требовать от сервера указания поля действия исходящей формы. Следующий фрагмент кода показывает, как форма должна быть закодирована на HTML-странице:

<form method="POST" action="j_security_check">
  <input type="text" name="j_username">
  <input type="password" name="j_password">
</form>

Аутентификация дайджеста

Как и обычная аутентификация, аутентификация дайджеста аутентифицирует пользователя на основе имени пользователя и пароля. Однако, в отличие от базовой аутентификации, аутентификация дайджеста не отправляет пользовательские пароли по сети. Вместо этого клиент отправляет односторонний криптографический хеш пароля и дополнительных данных. Хотя пароли не отправляются на проводе, для аутентификации дайджеста требуется, чтобы эквивалентные эквиваленты паролей были доступны для контейнера проверки подлинности, чтобы он мог проверять полученные аутентификаторы, вычисляя ожидаемый дайджест.

Литература:

Ответ 2

Попробуйте использовать сервлет-фильтры, не нужно настраивать JAAS и других сотрудников.

Ответ 3

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

RequestDispatcher dis = request.getRequestDispatcher("relativeURL2Jsp");
dis.forward(request, response);