En Spring Security 3.1 estoy utilizando la autenticación basada en formularios y quiero poner atributos adicionales en el objeto UserDetails
-
28-10-2019 - |
Pregunta
Soy nuevo en Springs y no es un programador avanzado de Java.
Estoy creando un prototipo donde estoy usando la seguridad de Springs. Para mantenerlo simple, estoy usando la autenticación de usuarios basada en formularios JSP y tengo algunos usuarios ficticios en mi 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>
La idea es que más tarde este método de autenticación será reemplazado por la autenticación de OpenID.
Ahora, lo que necesito es una vez que el usuario se autentica, utilizando el nombre de usuario autenticado, me gustaría recuperar detalles adicionales del usuario de una tabla de base de datos y ponerlo en el objeto Springs UserDetails para que esté disponible para mí todo el tiempo
Lo que he investigado hasta ahora es que necesito crear mi servicio de usuario userado personalizado
Mi pregunta es que si estoy usando el método de autenticación estándar de Springs, ¿necesito crear un servicio de user detailsService personalizado? Solo quiero almacenar algunos detalles adicionales que lo lean desde una base de datos.
He pasado por muchos ejemplos, pero ninguno de ellos responde a este problema en particular. También como soy poco nuevo en estas tecnologías. No me pierdo cómo unir los fragmentos de código. Cualquier ayuda para señalarme a la dirección correcta sería genial
Gracias
Solución
Sí. Generalmente necesitas una costumbre UserDetailsService
que devuelve tu extendido UserDetails
Objeto con las propiedades adicionales que desea. Encontrará muchas configuraciones de ejemplo si busca así, como Éste, por ejemplo.
Estrictamente hablando, no tienes que usar un UserDetailsService
o implementar UserDetails
(puede implementar AuthenticationProvider
directamente), pero es el enfoque más fácil de estar y probablemente donde debes comenzar.