Немного поздно на это, но, надеюсь, это может помочь другим найти эту ссылку. Если вы используете пользовательский UserDetailsService, вы можете, например, установить учетные данные объекта пользователяNonExpired на false, чтобы не разрешать доступ к любому защищенному контенту, пока это поле не будет установлено на true.
В принципе, если у вас есть срок действия пароля, вы установите поле в своей модели пользователя (возможно, passwordExpired), и когда пользователь UserDetailsService вытащит пользователя, ваш UserDetailsService будет использовать это значение для установки учетных данныхNonExpired.
Затем все, что вам нужно сделать, это добавить конфигурацию вашего приложенияContext-security.xml для настройки сопоставлений исключений аутентификации. Это позволит вам поймать исключение, занесенное с использованием устаревших учетных данных, и заставить пользователя перейти на страницу сброса пароля. Вы можете дополнительно заблокировать заблокированные и отключенные учетные записи, используя аналогичный метод. Пример конфигурации приведен ниже:
ApplicationContext-security.xml
<beans:bean id="exceptionTranslationFilter" class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler">
<beans:property name="exceptionMappings">
<beans:props>
<beans:prop key="org.springframework.security.authentication.BadCredentialsException">/login_error</beans:prop>
<beans:prop key="org.springframework.security.authentication.CredentialsExpiredException">/password_expired</beans:prop>
<beans:prop key="org.springframework.security.authentication.LockedException">/locked</beans:prop>
<beans:prop key="org.springframework.secuirty.authentication.DisabledException">/disabled</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
<http use-expressions="true">
<!-- ADD BLACKLIST/WHITELIST URL MAPPING -->
<form-login login-page="/login" default-target-url="/" authentication-failure-handler-ref="exceptionTranslationFilter" />
</http>
Тогда просто убедитесь, что у вас есть настройки контроллеров служить эти ссылки с соответствующим содержанием.
Спасибо за это. Я могу сделать первую часть довольно легко, но не уверен, что вы подразумеваете под «перенаправлением пользователя на ... с помощью SavedRequestAwareAuthenticationSuccessHandler». Как перенаправить на обработчик? – DrewEaster
@dewzilla: Я добавил образец того, как он может выглядеть (с контроллером Spring MVC для смены пароля, а не с проверкой). – axtavt
На самом деле это противоречит проверке истечения срока действия пароля в обработчике проверки подлинности, не так ли? Вы не сможете аутентифицироваться, если срок действия пароля истек. Проверьте ответ, предоставленный @jyore. – Octavian