Подключение к предварительной аутентификации с помощью Spring-Security-Core - PullRequest
3 голосов
/ 20 июня 2011

Мне нужно сделать некоторые пользовательские действия, когда пользователь пытается войти в систему в зависимости от своего имени пользователя, но эти вещи должны произойти до процесса аутентификации. Вот что у меня так далеко.

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

Другие вещи, которые мне нужно сделать, требуют нескольких флагов на объекте пользователя, которые Spring-Security на самом деле не знает или не заботится. Но мне нужно подключиться к процессу аутентификации, проверить эти флаги и вернуть соответствующие сообщения об ошибках пользователю. Чтобы привести более конкретный пример, мне нужно знать, впервые ли пользователь заходит в систему. Таким образом, у нас есть флаг для отслеживания этого пользователя. Когда пользователь пытается аутентифицироваться, мне нужно прочитать это значение и выполнить некоторые действия, включая отправку сообщения обратно пользователю и остановку аутентификации.

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

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

Я думаю, что если я справлюсь с одним сценарием, я смогу выяснить другие, которые мне нужны.

ОБНОВЛЕНИЕ: я сейчас читаю на фильтрах, чтобы посмотреть, пропустил ли я что-то ...

1 Ответ

4 голосов
/ 20 июня 2011

Самое простое было подключиться к процессу аутентификации - предоставить свой AuthenticationProvider . Есть только два способа реализации. В authenticate() вы можете делать все свои вещи.

Чтобы настроить вашего провайдера в рамках, сделайте что-то вроде:

<authentication-manager>
  <authentication-provider ref="myAuthenticationProvider" />
</authentication-manager>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...