2011-10-18 10 views
5

he implementado UserDetailsService, devuelve una instancia de MyUser (que implementa UserDetails)cuenta Acceder a mi objeto de usuario personalizada en la página JSP, utilizando muelle 3 de seguridad

public MyUser loadUserByUsername(String arg0) 

Ahora quiero acceder a mis captadores personalizados/campos de MyUser en mis páginas JSP, hasta ahora tengo este:

${pageContext.request.userPrincipal.name} 

Pero eso sólo permite el acceso a un objeto Principal. ¿Cómo puedo acceder al objeto MyUser?

Respuesta

7

su fácil en la página JSP añadí esto:

<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %> 
... 
<sec:authentication property="principal.firstname" /> 

Dónde principal es realmente una instancia de MyUser, por lo que "nombre" puede ser cualquiera de mis captadores y definidores personalizados

2

Si su objeto MyUser implementa Principal y lo coloca en la sesión http con el inicio de sesión correcto, puede obtenerlo de la sesión y emitirlo.


podría implementar el AuthenticationSuccessHandler inyectar su UserDetailsService allí y lo coloca en la sesión.

Luego puede inyectar su AuthenticationSuccessHandler en el UsernamePasswordauthenticationFilter que maneja el elemento <form-login>.

Si me da detalles sobre su configuración de contexto de seguridad podría darle más detalles.

+0

estoy de acuerdo 100%, ¿cómo puedo "coloco en la sesión HTTP en el inicio de sesión correcto, usted podría obtener de la sesión, y echarlo. " – NimChimpsky

+0

@NimChimpsky pegue algunas partes relevantes de su configuración de seguridad, por favor. Editaré mi respuesta con un poco más de detalle. – Simeon

+0

Gracias por su ayuda, tengo la solución, lo publicaré. – NimChimpsky

6

Después de analizar la HTTPSesson, inmediatamente después del inicio de sesión exitoso, descubrí que hay un atributo llamado SPRING_SECURITY_CONTEXT. Por ejemplo, el mío UserDetails personalizado tiene un objeto llamado user, que tiene la propiedad firstName. En JSP, valor de esta propiedad se puede llegar con lo siguiente:

${sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.user.firstName} 
+1

para mí '$ {sessionScope.SPRING_SECURITY_CONTEXT.authentication.principal.email}' funcionó como también puedo ver, incluso en '' tag obtenemos 'principal.firstname' –

Cuestiones relacionadas