Wie verwaltet Spring Security SecurityContext in einem Thread über Webanwendungsanfragen hinweg?

8

In SpringSecurity hat es den Klassennamen SecurityContextHolder und seine Spezifikation: 'Verknüpft einen bestimmten SecurityContext mit dem aktuellen Ausführungsthread.' Mit Web-Anwendung, wann immer eine Anfrage an den Server kommt, lädt Spring auch SecurityContext dieser Anfrage in SecurityContextHolder für seinen Thread neu und setzt sie.

    
Martin 24.08.2011, 09:28
quelle

2 Antworten

9

Ja, der SecurityContextPersistenceFilter wird ausgeführt Sorge dafür. Standardmäßig findet es den SecurityContext in der HttpSession und bindet ihn über den SecurityContextHolder an den Thread. Wenn die Anfrage beendet ist, wird das Gegenteil getan - es wird der SecurityContext aus dem Thread genommen und in die Sitzung eingefügt.

Aus dem Javadoc:

  

Füllt den SecurityContextHolder mit Informationen, die er von der   konfigurierte SecurityContextRepository vor der Anfrage und speichert sie   es zurück in das Repository, sobald die Anfrage abgeschlossen und gelöscht wurde   der Kontexthalter. Standardmäßig verwendet es ein   HttpSessionSecurityContextRepository.

    
sourcedelica 25.08.2011 22:53
quelle
7
  

Mit Web-Anwendung, wann immer eine Anfrage an den Server kommt, lädt Spring auch SecurityContext dieser Anfrage in SecurityContextHolder für seinen Thread neu und setzt sie.

Grundsätzlich ja.

Das Standardverhalten von SecurityContextHolder.getInstance() besteht darin, eine SecurityContextHolder -Instanz zurückzugeben, die als Thread-Local des aktuellen Threads gespeichert wurde. (Dies ist nur der Standardmechanismus. Sie können eine andere Strategie verwenden, um SecurityContextHolder zu finden, indem Sie SecurityContextHolder.setStrategemName() aufrufen)

Ein SpringSecurity-Filter stellt sicher, dass das SecurityContextHolder der Anfrage (wie auch immer es sich befindet) zu Beginn mit den Anforderungsinformationen geladen wird und dass der Inhaber am Ende der Anforderungsverarbeitung gelöscht wird.

    
Stephen C 24.08.2011 10:07
quelle