Zoek de geregistreerde veerbeveiligingsfilters

1. Overzicht

Spring Security is gebaseerd op een reeks servletfilters. Elk filter heeft een specifieke verantwoordelijkheid en afhankelijk van de configuratie worden filters toegevoegd of verwijderd.

In deze tutorial we zullen verschillende manieren bespreken om de geregistreerde Spring Security Filters te vinden.

2. Beveiligingsfoutopsporing

Ten eerste zullen we beveiligingsfoutopsporing inschakelen, waarmee bij elk verzoek gedetailleerde beveiligingsinformatie wordt geregistreerd.

We kunnen beveiligingsopsporing inschakelen met behulp van de debuggen eigendom:

@EnableWebSecurity (debug = true)

Op deze manier wordt, wanneer we een verzoek naar de server sturen, alle verzoekinformatie gelogd.

We kunnen ook de volledige beveiligingsfilterketen zien:

Beveiligingsfilterketen: [WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter UitloggenFilter GebruikersnaamPasswordAuthenticationFilter // ...]

3. Logboekregistratie

Vervolgens vinden we onze beveiligingsfilters door de logboekregistratie voor het FilterChainProxy.

We kunnen logboekregistratie inschakelen door de volgende regel toe te voegen aan application.properties:

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

Hier is het gerelateerde logboek:

DEBUG o.s.security.web.FilterChainProxy - / foos / 1 op positie 1 van 12 in extra filterketen; afvuren Filter: 'WebAsyncManagerIntegrationFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 op positie 2 van 12 in extra filterketen; afvuren Filter: 'SecurityContextPersistenceFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 op positie 3 van 12 in extra filterketen; afvuren Filter: 'HeaderWriterFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 op positie 4 van 12 in extra filterketen; afvuren Filter: 'LogoutFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 op positie 5 van 12 in extra filterketen; firing Filter: 'UsernamePasswordAuthenticationFilter' ...

4. De filters programmatisch verkrijgen

Nu zullen we zien hoe we de geregistreerde beveiligingsfilters programmatisch kunnen verkrijgen.

We zullen gebruiken FilterChainProxy om de beveiligingsfilters te krijgen.

Laten we eerst het springSecurityFilterChain Boon:

@Autowired @Qualifier ("springSecurityFilterChain") privéfilter springSecurityFilterChain;

Hier hebben we een @Kwalificatie met de naam springSecurityFilterChain met type Filter in plaats van FilterChainProxy. Dit komt omdat de methode van springSecurityFilterChain () in WebSecurityConfiguration, die de filterketen Spring Security creëert, retourtype Filter en niet FilterChainProxy.

Vervolgens casten we dit object naar FilterChainProxy en bel de getFilterChains () methode:

openbare ongeldige getFilters () {FilterChainProxy filterChainProxy = (FilterChainProxy) springSecurityFilterChain; Lijst lijst = filterChainProxy.getFilterChains (); list.stream () .flatMap (chain -> chain.getFilters (). stream ()) .forEach (filter -> System.out.println (filter.getClass ())); }

En hier is een voorbeelduitvoer:

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.context.SecurityContextPersistenceFilter class org.springframework.security.web.header.HeaderWriterFilter class org.springframework. .logout.LogoutFilter klasse org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter ...

Merk op dat sinds Spring Security 3.1, FilterChainProxy wordt geconfigureerd met behulp van een lijst met BeveiligingFilterChain. De meeste applicaties hebben er echter maar één nodig BeveiligingFilterChain.

5. Belangrijke veerbeveiligingsfilters

Laten we tot slot eens kijken naar enkele van de belangrijke beveiligingsfilters:

  • GebruikersnaamPasswordAuthenticationFilter: procesauthenticatie, reageert standaard op “/ login” -URL
  • AnonymousAuthenticationFilter: als er geen authenticatie-object in SecurityContextHolder is, maakt het een anoniem authenticatie-object aan en plaatst het daar
  • Filter Beveiliging Interceptor: uitzonderingen maken wanneer toegang wordt geweigerd
  • ExceptionTranslationFilter: vang uitzonderingen op Spring Security

6. Conclusie

In deze korte artikelen hebben we onderzocht hoe we de geregistreerde Spring Security-filters programmatisch en met behulp van logboeken kunnen vinden.

Zoals altijd is de broncode te vinden op GitHub.