Spring Security - получение имени пользователя, который в данный момент пытается войти - PullRequest
0 голосов
/ 13 мая 2019

Мне нужно реализовать PasswordEncoder, который генерирует соленые пароли.Соли зависят от пользователя (UUID) и хранятся в соответствующих объектах User.

Поэтому мне нужен доступ либо к User напрямую, либо к объекту UserDetails, который содержит ссылку.Очень легко найти, если у меня было имя пользователя, пытающегося войти в систему.

И в этом заключается проблема.Кажется, я не могу его схватить.

Что касается SecurityContext, мы все еще имеем дело с anonymousUser.

Я знаю, что должно быть UsernamePasswordAuthenticationToken где-то валяется, но я не могу это сделать, потому что это не боб.И чтобы определить bean-объект-обертку, в котором он находится, мне нужно сначала выяснить, где его найти.

Как получить имя пользователя, пытающегося войти в систему?

Буду очень признателен за помощь.:)

(Sidenote: Пожалуйста, не рекомендуйте мне «не делать этого» или переносить пароли и начинать использовать BCryptPasswordEncoder или что-то в этом духе. Это то, что мы очень хотели бы как сделать в какой-то момент в будущем, но пока не разрешено.)

Ответы [ 2 ]

2 голосов
/ 13 мая 2019

Вы не сможете сделать это только с PasswordEncoder, поскольку абстракция предполагает, что вы можете закодировать пароль, используя только текстовый пароль (или сравнить с использованием хешированного пароля).Однако, если вы используете пользовательский AuthenticationProvider (то есть то, что вызывает PasswordEncoder), у вас будет доступ к входящему объекту Authentication, включая имя пользователя.Подробнее здесь .

1 голос
/ 13 мая 2019

Вызов PasswordEncoder.matches(...) осуществляется методом additionalAuthenticationChecks(...) из DaoAuthenticationProvider, который имеет доступ к значению имени пользователя (principal).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...