Un po 'in ritardo su questo, ma si spera che questo possa aiutare gli altri a trovare questo collegamento. Se si utilizza un UserDetailsService personalizzato, è possibile impostare le credenziali di UserNonExpired su false, ad esempio, per non consentire l'accesso a qualsiasi contenuto protetto finché il campo non viene impostato su true.
Fondamentalmente, quando si ha una scadenza della password, si imposta un campo nel modello utente (passwordExpired forse), e quando UserDetailsService attira l'utente, UserDetailsService utilizzerà tale valore per impostare credentialsNonExpired.
Quindi, tutto ciò che dovete fare è aggiungere qualche configurazione alla vostra applicazioneContext-security.xml per configurare i mapping delle eccezioni di autenticazione. Ciò consentirà di rilevare l'eccezione generata dalle credenziali scadute e forzare l'utente a una pagina di reimpostazione della password. Puoi inoltre catturare account bloccati e disabilitati usando un metodo simile. L'esempio di configurazione è la seguente:
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>
Poi basta assicurarsi di avere la configurazione controller per servire quei collegamenti con il contenuto appropriato.
Grazie per questo. Posso fare la prima parte abbastanza facilmente, ma non sono sicuro di cosa intendi per "reindirizzare l'utente a ... utilizzando SavedRequestAware AuthenticationSuccessHandler". Come reindirizzare a un gestore? – DrewEaster
@dewzilla: ho aggiunto il campione di come potrebbe apparire come (con regolatore di Spring MVC per il cambiamento della password, non testato). – axtavt
In realtà è controintuitivo controllare la scadenza della password nel gestore di successo dell'autenticazione, vero? Non dovresti essere in grado di autenticarti se la password è scaduta. Controlla la risposta fornita da @jyore. – Octavian