Cuando Spring Security autentica el usuario, se crea un UserDetail objeto y está disponible para la búsqueda actual de usuario en la web de la aplicación. Pero digamos que yo quiero mantener una costumbre objeto de usuario con las preferencias y otros detalles, junto con UserDetails o Sustitución de UserDetails.

Así que, ¿cómo personalizar el objeto de Usuario de la sesión cuando la Primavera Seguridad autentica
con éxito? Y cómo quitar de usuario personalizada objeto de la sesión cuando la Primavera Seguridad de la sesión de usuario que ha iniciado sesión.

O hay alguna manera de hacer esto?

  • Me encanta cuando alguien le pide exactamente lo que quiero preguntar !
InformationsquelleAutor Nachiket | 2009-12-08

2 Comentarios

  1. 18

    La mejor manera de hacer esto de la OMI es tener uno de sus servicios (probablemente UserService) implementar UserDetailsService y especificar en la primavera de seguridad XML que usted desea utilizar sus propios datos de usuario de servicio.

    Lo que el UserDetailsService tendrá que hacer es implementar un loadByUsername(String username) método. Este método debe devolver una clase que implementa UserDetails. Este puede ser su propio objeto personalizado almacenar lo que quieras. La ventaja de esto es que usted puede acceder a las propiedades del objeto desde un JSP a través de spring security taglib y también está siempre disponible en la SecurityContextHolder singleton (subprocesos) en la primavera de de seguridad.

    Aquí hay un enlace a la documentación: la primavera manual de seguridad, en el capítulo 8
    Aquí hay un post en el blog hablando de la implementación de un usuario personalizada, detalles de servicio para el cifrado de contraseñas: ejemplo de uso

    Espero que esto ayude

    Edit: Olvidé mencionar que el objeto va a ser eliminado desde el contexto de la seguridad y la sesión para cerrar la sesión. Esto es de lo más útil es que es completamente administrado por el resorte de seguridad.

  2. 0

    Que sin duda necesita para escribir su propia UserDetailService. En el objeto Principal no es el usuario y también hay Detalles de un objeto en el AuthenticationToken que puede almacenar un Mapa(String, String) de otra información de inicio de sesión.

    public class RequestFormDeatils extends SpringSecurityFilter {
    
       protected void doFilterHttp(HttpServletRequest request, ...) {
          SecurityContext sec = SecurityContextHolder.getContent();
          AbstractAuthenticationToken auth = (AbstractAuthenticationToken)sec.getAuthentication();
          Map<String, String> m = new HashMap<String, String>;
          m.put("myCustom1", request.getParameter("myCustom1"));
          m.put("myCustom2", request.getParameter("myCustom2"));
          auth.setDetails(m);
    }

    Ahora en cualquier lugar en el código de obtener el uso de la SecurityContext para propagar esta relacionado con la seguridad info sin tener a la pareja a su UserDetails objeto, o pasar como argumentos. Hago este código en un SecurityFilter al final de la Primavera Filtro de Seguridad de la cadena.

    <bean id="requestFormFilter" class="...RequestFormDetails">
       <custom-filter position="LAST" />
    </bean> 

    Esta información será eliminado cuando el usuario se quita (como en la sesión).  

Dejar respuesta

Please enter your comment!
Please enter your name here