Dans Spring Security 3.1, j'utilise l'authentification par formulaire et je souhaite mettre des attributs supplémentaires dans l'objet UserDetails
-
28-10-2019 - |
Question
Je suis nouveau sur Springs et je ne suis pas un programmeur avancé de Java.
Je crée un prototype dans lequel j'utilise la sécurité Springs. pour rester simple, j'utilise l'authentification utilisateur basée sur le formulaire JSP et j'ai des utilisateurs factices dans mon applicationContext-security.xml
<security:http auto-config='true'>
<security:intercept-url pattern="/**" access="ROLE_USER" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:user-service>
<security:user name="foo" password="foo" authorities="ROLE_USER, ROLE_ADMIN" />
<security:user name="bob" password="bob" authorities="ROLE_USER" />
</security:user-service>
</security:authentication-provider>
</security:authentication-manager>
L'idée est que plus tard, cette méthode d'authentification sera remplacée par l'authentification OpenId.
Maintenant, ce dont j'ai besoin, c'est une fois que l'utilisateur est authentifié, en utilisant le nom d'utilisateur authentifié, je voudrais récupérer des détails supplémentaires sur l'utilisateur à partir d'une table de base de données et les mettre dans l'objet Springs UserDetails afin qu'il soit disponible pour moi tout le temps
ce que j'ai recherché jusqu'à présent, c'est que je dois créer mon service personnalisé UserDetailsService
Ma question est: si j'utilise la méthode d'authentification standard de Springs, ai-je besoin de créer un UserDetailsService personnalisé? Je veux juste stocker quelques détails supplémentaires en le lisant à partir d'une base de données.
J'ai parcouru de nombreux exemples mais aucun d'entre eux ne répond à ce problème particulier. aussi depuis que je suis peu nouveau dans ces technologies. je me perds pas comment lier les extraits de code ensemble. toute aide pour me diriger vers la bonne direction serait formidable
merci
La solution
Oui.En règle générale, vous avez besoin d'un UserDetailsService
personnalisé qui renvoie votre objet UserDetails
étendu avec les propriétés supplémentaires souhaitées.Vous trouverez de nombreux exemples de configurations si vous recherchez SO, comme celui-ci , par exemple.
À proprement parler, vous n'avez pas besoin d'utiliser un UserDetailsService
ou d'implémenter UserDetails
(vous pouvez implémenter AuthenticationProvider
directement), mais c'est l'approche la plus simple pour être avec et probablement par où commencer.