J'ai une application Web qui utilise un démarrage à ressort et une sécurité configurée pour utiliser le formulaire de connexion avec l'authentification JDBC.
Connexion et déconnexion fonctionne bien et en général, Auth semble fonctionner. P>
sauf pour Un cas ... lorsque j'essaie de changer mon mot de passe, je remarque que, si le mot de passe change est un succès, l'authentificationManager que je souhaite vérifier le mot de passe existant ... est null! p>
Comment puis-je configurer un authentificationManager (peut-être avec un daoauthenticationProvider et / ou daoauthenticationmanager?) Pour que l'authentificationManager ne soit pas nulle et vérifiera le mot de passe existant? < / p>
Configue pertinente: p> authcontroller, et ici, je souhaite un utilisateur utilisateur injecté à cet effet - pour pouvoir facilement modifier le mot de passe de compte: P> < Pré> xxx pré> si j'essaie la configuration mentionnée Ci-dessous dans une réponse, je reçois: p>
3 Réponses :
Je ne sais pas pourquoi c'est le cas, mais ne pouviez-vous pas simplement faire quelque chose de similaire à cela, au lieu de passer à travers l'Authmanager: Travailler directement avec l'utilisateur actuellement logedin (Détails).
Cela ne fonctionnera pas car l'injection ne se produit pas dans une classe de sécurité de printemps.
Votre configuration est défectueuse, car vous activez une instanciation trop précoce du La sécurité du ressort de cette façon sera correctement initialiser et configurer tous les composants. (Bien que 3 et 4 ne soient pas liés, ils doivent être définis pour une configuration appropriée au sens général). p> userDétailsService code> ce que vous devriez faire
configureglobal code> doit renvoyer
void code>. li>
userDétailsServiceBean code>, appelez
super code> et annotant cela avec
@bean code>. Comme documenté ici li>
userDétailsService code> Configuration et ne pas encoder le mot de passe vous-même lors de la création de l'utilisateur. LI>
@enablewebsecurity code> sur votre classe aussi. LI>
OL>
J'ai ajouté d'autres informations à la question.
Je ne pense pas que ce soit ce que le propriétaire de la question veut, il n'a pas fourni d'instance de UserDétailsManager ...
Il avait l'habitude d'exposer un, cependant apparemment dans une version récente qui a changé (il y a maintenant un wrapper paresseux autour de lui). Qui expose uniquement le userDétailsService code>.