En Spring Security 3.1 estoy utilizando la autenticación basada en formularios y quiero poner atributos adicionales en el objeto UserDetails

StackOverflow https://stackoverflow.com/questions/9367089

  •  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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top