Suchen Sie die registrierten Federsicherheitsfilter

1. Übersicht

Spring Security basiert auf einer Kette von Servlet-Filtern. Jeder Filter hat eine bestimmte Verantwortung und je nach Konfiguration werden Filter hinzugefügt oder entfernt.

In diesem Tutorial werden verschiedene Möglichkeiten zum Auffinden der registrierten Spring-Sicherheitsfilter erläutert .

2. Sicherheits-Debugging

Zunächst aktivieren wir das Sicherheits-Debugging, bei dem detaillierte Sicherheitsinformationen zu jeder Anforderung protokolliert werden.

Wir können das Sicherheits-Debugging mithilfe der Debug- Eigenschaft aktivieren :

@EnableWebSecurity(debug = true)

Auf diese Weise werden beim Senden einer Anfrage an den Server alle Anforderungsinformationen protokolliert.

Wir können auch die gesamte Sicherheitsfilterkette sehen:

Security filter chain: [ WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter LogoutFilter UsernamePasswordAuthenticationFilter // ... ]

3. Protokollierung

Als Nächstes finden wir unsere Sicherheitsfilter, indem wir die Protokollierung für FilterChainProxy aktivieren .

Sie können die Protokollierung aktivieren, indem Sie application.properties die folgende Zeile hinzufügen :

logging.level.org.springframework.security.web.FilterChainProxy=DEBUG

Hier ist das zugehörige Protokoll:

DEBUG o.s.security.web.FilterChainProxy - /foos/1 at position 1 of 12 in additional filter chain; firing Filter: 'WebAsyncManagerIntegrationFilter' DEBUG o.s.security.web.FilterChainProxy - /foos/1 at position 2 of 12 in additional filter chain; firing Filter: 'SecurityContextPersistenceFilter' DEBUG o.s.security.web.FilterChainProxy - /foos/1 at position 3 of 12 in additional filter chain; firing Filter: 'HeaderWriterFilter' DEBUG o.s.security.web.FilterChainProxy - /foos/1 at position 4 of 12 in additional filter chain; firing Filter: 'LogoutFilter' DEBUG o.s.security.web.FilterChainProxy - /foos/1 at position 5 of 12 in additional filter chain; firing Filter: 'UsernamePasswordAuthenticationFilter' ...

4. Programmgesteuertes Abrufen der Filter

Nun werden wir sehen, wie die registrierten Sicherheitsfilter programmgesteuert abgerufen werden.

Wir werden FilterChainProxy verwenden , um die Sicherheitsfilter zu erhalten.

Lassen Sie uns zunächst die springSecurityFilterChain- Bean automatisch verdrahten :

@Autowired @Qualifier("springSecurityFilterChain") private Filter springSecurityFilterChain;

Hier haben wir einen @Qualifier mit dem Namen springSecurityFilterChain vom Typ Filter anstelle von FilterChainProxy verwendet. Dies liegt daran, dass die Methode springSecurityFilterChain () in WebSecurityConfiguration die Spring Security-Filterkette, den Rückgabetyp Filter und nicht FilterChainProxy erstellt.

Als Nächstes wandeln wir dieses Objekt in FilterChainProxy um und rufen die Methode getFilterChains () auf :

public void getFilters() { FilterChainProxy filterChainProxy = (FilterChainProxy) springSecurityFilterChain; List list = filterChainProxy.getFilterChains(); list.stream() .flatMap(chain -> chain.getFilters().stream()) .forEach(filter -> System.out.println(filter.getClass())); }

Und hier ist eine Beispielausgabe:

class org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter class org.springframework.security.web.context.SecurityContextPersistenceFilter class org.springframework.security.web.header.HeaderWriterFilter class org.springframework.security.web.authentication.logout.LogoutFilter class org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter ...

Beachten Sie, dass FilterChainProxy seit Spring Security 3.1 mithilfe einer Liste von SecurityFilterChain konfiguriert wird . Die meisten Anwendungen benötigen jedoch nur eine SecurityFilterChain.

5. Wichtige Federsicherheitsfilter

Schauen wir uns zum Schluss einige wichtige Sicherheitsfilter an:

  • UsernamePasswordAuthenticationFilter : Prozessauthentifizierung, antwortet standardmäßig auf die URL "/ login"
  • AnonymousAuthenticationFilter : Wenn in SecurityContextHolder kein Authentifizierungsobjekt vorhanden ist, wird ein anonymes Authentifizierungsobjekt erstellt und dort abgelegt
  • FilterSecurityInterceptor: Ausnahmen auslösen , wenn der Zugriff verweigert wird
  • ExceptionTranslationFilter : Spring Security-Ausnahmen abfangen

6. Fazit

In diesen kurzen Artikeln haben wir untersucht, wie Sie die registrierten Spring Security-Filter programmgesteuert und mithilfe von Protokollen finden.

Wie immer ist der Quellcode auf GitHub zu finden.