2010-08-22 14 views
19

Per scopi di registrazione, mi piacerebbe creare un logger che aggiunge automaticamente l'ID della sessione corrente alle righe registrate.
per gli utenti registrati questo non è un problema:Recupero dell'ID sessione con Spring Security

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

Il problema è, prima che l'utente si è connesso getAuthentication() rendimenti null. C'è un altro modo per ottenere l'ID di sessione senza avere un riferimento alla risposta corrente o qualcosa del genere?

Grazie!

+0

Questa domanda risponde alla mia domanda. Grazie. Buon modo di fare domande. – TRiNE

risposta

43

È possibile utilizzare

RequestContextHolder.currentRequestAttributes().getSessionId(); 

Questa si basa sulla Primavera di RequestContextHolder, quindi dovrebbe essere usato con Spring MVC del DispatcherServlet o si dovrebbe avere un RequestContextListener dichiarato. Anche la sessione verrà creata se non esiste.

+0

Funziona come un fascino! Grazie! – abyx

+0

@axtavt Ho un'applicazione angolare in esecuzione su una porta diversa e il codice server è in esecuzione in una porta diversa. Nel mio codice server è stata implementata la sicurezza di primavera che reindirizzamento a un altro controller java in caso di successo, in quanto ho avvolto tutti i ruoli utente e altre informazioni. ma sto ottenendo un solo 'anonymusUser' perché nel mio URL di reindirizzamento non ho cookie. è quello che ha superato la tua soluzione .. – SakthiSureshAnand

Problemi correlati