Filtre personnalisé de sécurité de printemps (Changer le mot de passe)
Je suis en utilisant le Printemps de Sécurité pour la sécurisation des requêtes HTTP à un site web. La principale utilisation est pour la sécurisation des pages telles que l'utilisateur est redirigé vers la page de connexion lorsque vous essayez d'accéder à ces pages.
Cependant, j'ai une autre exigence. Dans mon modèle, je peux le drapeau de l'utilisateur mot de passe comme temporaire de telle sorte que, lorsqu'ils ont réussi à la connexion, ils doivent automatiquement être obligés de changer leur mot de passe. Une fois le mot de passe est changé, ils doivent ensuite être transmis à la page qu'ils ont été à l'origine de la tentative d'accès.
Quelqu'un a utilisé le Printemps de Sécurité à cet effet? Dois-je créer mon propre filtre personnalisé?
Merci,
Andrew
source d'informationauteur DrewEaster
Vous devez vous connecter pour publier un commentaire.
Au Printemps de Sécurité 3.0, vous pouvez mettre en œuvre une coutume
AuthenticationSuccessHandler
.Dans ce gestionnaire, vous pouvez rediriger un utilisateur avec mot de passe temporaire pour le changement de mot de passe de la page au lieu de l'origine de la requête de la page. Après le mot de passe est modifié, vous pouvez rediriger l'utilisateur à l'origine de la demande de page à l'aide de
SavedRequestAwareAuthenticationSuccessHandler
qui est le gestionnaire par défaut de mise en œuvre.Un peu en retard sur ce point, mais j'espère que cela peut aider les autres à trouver ce lien. Si vous utilisez un personnalisé UserDetailsService, vous pouvez définir l'Utilisateur de l'objet credentialsNonExpired à faux, par exemple, de ne pas autoriser l'accès à tout le contenu sécurisé jusqu'à ce que le champ est défini sur true.
Fondamentalement, lorsque vous avez expiration du mot de passe, vous allez définir un champ dans votre modèle d'Utilisateur (passwordExpired peut-être), et lorsque votre UserDetailsService tire de l'utilisateur, de votre UserDetailsService utilise cette valeur pour définir credentialsNonExpired.
Ensuite, tout ce que vous devez faire est d'ajouter un peu de config de votre applicationContext-security.xml pour configurer l'authentification exception des mappages. Cela vous permettra d'attraper l'exception levée avec l'expiration des informations d'identification et de forcer l'utilisateur à réinitialiser le mot de passe de la page. Vous pouvez en outre attraper verrouillé et comptes désactivés à l'aide d'une méthode similaire. La config exemple est montré ci-dessous:
applicationContext-security.xml
Alors assurez-vous d'avoir vos contrôleurs d'installation pour servir de ces liens avec le contenu approprié.
Oui, je l'ai fait avec un filtre ForceChangePasswordFilter. Parce que si l'utilisateur tape l'url à la main qu'ils peuvent contourner le formulaire de changement de mot de passe. Avec le filtre de la demande toujours obtenir intercepté.
Très utile formulaire de réponse jyorec'était exactement ce que je cherchais. Dans le cas où vous utilisez une classe personnalisée mise en œuvre de
UserDetailsService
vous pouvez le faire comme les suivantes, de même que ci-dessus bean définition dans votreapplicationContext.xml
. Une chose est que, sur la base de votre LMC en-tête, vous pourriez avoir besoin d'utiliser<bean ....
ou<prop ...
au lieu de<beans:bean ...
ou<beans:prop ...