Как принудительно изменить пароль при первоначальном входе пользователя в систему с помощью Spring Security
Что было бы наиболее элегантным способом принудительной смены пароля для пользователя?начальный вход с использованием Spring Security?
Я пытался реализовать кастомAuthenticationSuccessHandler
как уже упоминалосьВотно, как уже упоминалосьrodrigoapЕсли пользователь вручную вводит URL-адрес в адресной строке, он все равно сможет перейти на эту страницу, даже если он не сделал этого.сменить пароль.
Я сделал это с помощью фильтра ForceChangePasswordFilter. Потому что, если пользователь вводит URL вручную, он может обойти форму смены пароля. С помощью фильтра запрос всегда перехватывается.
Таким образом, я приступил к реализации пользовательского фильтра.
Мой вопрос заключается в следующем: когда я реализую пользовательский фильтр и отправляю перенаправление внутри него, он снова проходит через фильтр, вызывая бесконечный цикл перенаправления, как упоминалосьВот, Я попытался реализовать упомянутое решение, объявив два http-тега в моем security-context.xml, причем первый тег имелpattern
атрибут как таковой, но он все еще проходит через мой пользовательский фильтр:
...
...
Моя текущая реализация (которая работает):
Внутри моего собственного обработчика успешной аутентификации я установил атрибут сеансаisFirstLogin
В моем ForcePasswordChangeFilter я проверяю сеансisFirstLogin
установленоЕсли это так, то я отправляю перенаправление на мою принудительную смену пароляОстальное я звонюchain.doFilter()
Моя проблема с этой реализацией состоит в том, что доступ к моей папке ресурсов также проходит через этот фильтр, который вызывает искажение моей страницы (потому что * .js и * .css не были успешно получены). Это причина, почему я пытался иметь два теги в моем приложении application context.xml (которое нет работа).
Таким образом, мне пришлось вручную фильтровать запрос, если servletPath запускается или содержит "/Ресурсы", Я не'не хочу, чтобы это было так - необходимость вручную фильтровать путь запроса - но сейчас этоЧто у меня есть?
Какие'более элегантный способ сделать это?