2010-08-22 4 views
19

Für Protokollierungszwecke möchte ich einen Protokollierer erstellen, der die ID der aktuellen Sitzung automatisch den protokollierten Zeilen hinzufügt.
Für eingeloggte Benutzer ist dies kein Problem:Abrufen der Sitzungs-ID mit der Spring-Sicherheit

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

Das Problem ist, bevor der Benutzer in getAuthentication() kehrt null angemeldet hat. Gibt es eine andere Möglichkeit, die Sitzungs-ID abzurufen, ohne einen Verweis auf die aktuelle Antwort oder ähnliches zu haben?

Danke!

+0

Diese Frage beantwortet meine Frage. Vielen Dank. Gute Art, Fragen zu stellen. – TRiNE

Antwort

43

können Sie

RequestContextHolder.currentRequestAttributes().getSessionId(); 

verwenden Dieses auf Spring setzt RequestContextHolder, so sollte es DispatcherServlet oder Sie sollten ein RequestContextListener erklärt haben mit Spring MVC ist verwendet werden. Es wird auch eine Sitzung erstellt, wenn sie nicht existiert.

+0

Funktioniert wie ein Charme! Vielen Dank! – abyx

+0

@axtavt Ich habe angular appli läuft in diffrnt port und server code läuft in diffrnt port. In meinem Server-Code hat Spring-Sicherheit implementiert es auf einen anderen Java-Controller umleiten, wenn Erfolg, in dem ich alle Benutzerrollen und andere Informationen eingewickelt. aber ich erhalte nur einen "anonymenUser", weil meine Weiterleitungs-URL kein Cookie hat. Ist das deine Lösung? – SakthiSureshAnand