2010-08-22 31 views
19

Para fines de registro, me gustaría crear un registrador que agregue automáticamente el ID de la sesión actual a las líneas registradas.
para los usuarios registrados esto no es un problema:Recuperar ID de sesión con Spring Security

((WebAuthenticationDetails) SecurityContextHolder.getContext().getAuthentication().getDetails()) 
    .getSessionId() 

El problema es, antes de que el usuario ha iniciado sesión en getAuthentication() vuelve null. ¿Hay alguna otra manera de obtener la ID de sesión sin tener una referencia a la respuesta actual o algo por el estilo?

Gracias!

+0

Esta pregunta responde mi pregunta. Gracias. Buena forma de hacer preguntas. – TRiNE

Respuesta

43

Es posible utilizar

RequestContextHolder.currentRequestAttributes().getSessionId(); 

Esto se basa en la primavera de RequestContextHolder, por lo que debe utilizarse con Spring MVC de DispatcherServlet o usted debe tener una RequestContextListener declaró. También se creará una sesión si no existe.

+0

¡Funciona como un encanto! ¡Gracias! – abyx

+0

@axtavt Tengo una aplicación angular ejecutándose en un puerto diferente y el código del servidor se está ejecutando en un puerto diferente. En mi código de servidor implementé la seguridad de primavera redireccionando a otro controlador java si tenía éxito, en eso envolví todas las funciones de usuario y otra información. pero obtengo un único 'anonymusUser' porque mi url de redirección no es cookie. es que superar su solución ... – SakthiSureshAnand

Cuestiones relacionadas