Может ли за аутентификацией j_security_check следовать другой механизм веб-аутентификации?

В своем веб-приложении я использую вход на основе формы. У меня есть сценарий, в котором я должен проверить пользователей, присутствующих в другой базе данных, в дополнение к данным таблицы, установленной в login-config.xml.

Итак, я думал об этом потоке:

Пользователь пытается получить доступ к защищенному ресурсу -> если нет активного сеанса, будет перенаправлен на форму входа -> Пользователь вводит свои учетные данные -> j_security_check аутентифицируется в соответствии с логином-config.xml -> если аутентификация прошла успешно, хорошо, иначе перенаправление на страница с ошибкой jsp, где я проверяю, присутствует ли пользователь в другой БД (в частности, в Active Directory. У меня уже есть код для проверки учетных данных), и в случае успеха создаю сеанс -> else перенаправить на страницу с ошибкой

Возможна ли вообще часть, выделенная жирным шрифтом выше ??

Я читал в некоторых статьях, что после того, как j_security_check будет аутентифицироваться, нет никакого способа изменить это. Это правда???

Есть ли какое-либо другое возможное решение этой проблемы (кроме добавления пользователей из другой базы данных в таблицу, указанную в файле login-config.xml или изменение login-config.xml) ??

(Я использую Jboss)

Спасибо.


person Sudhakar    schedule 22.04.2012    source источник


Ответы (1)


Создайте фильтр сервлетов, который будет улавливать URL-адрес, на который пользователь перенаправляется после j_security_check. В этом фильтре проверьте учетные данные пользователя в другой базе данных.

Если проверка прошла успешно, добавьте к сеансу логическое значение, которое будет отражать этот факт. Если проверка не удалась, удалите сеанс (метод HttpSession.invalidate ()) и перенаправьте пользователя на страницу с ошибкой.

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

person Piotr Kochański    schedule 23.04.2012
comment
Спасибо за ответ @Piotr Kochanski. Я пробовал альтернативное, вероятно, не лучшее решение. Мы сделали следующее: j_security_check пытается проверить пользователя на мою локальную базу данных. Поскольку пользователь отсутствует, переходит к странице ошибки. Здесь я заменил страницу ошибки сервлетом, где я проверяю пользователя в другой БД, и если он действительный пользователь, я создаю запись в своей локальной БД и затем снова переадресовываем эти учетные данные в j_security_check. Теперь, когда запись присутствует, пользователю разрешен доступ. - person Sudhakar; 16.05.2012