Find de registrerede forårssikkerhedsfiltre

1. Oversigt

Spring Security er baseret på en kæde af servletfiltre. Hvert filter har et specifikt ansvar, og afhængigt af konfigurationen tilføjes eller fjernes filtre.

I denne vejledning vi diskuterer forskellige måder at finde de registrerede Spring Security Filters på.

2. Sikkerhedsfejlfinding

Først aktiverer vi sikkerhedsfejlfinding, der logger detaljerede sikkerhedsoplysninger på hver anmodning.

Vi kan aktivere sikkerhedsfejlfinding ved hjælp af fejlfinde ejendom:

@EnableWebSecurity (fejlret = sand)

På denne måde, når vi sender en anmodning til serveren, logges alle anmodningsoplysningerne.

Vi kan også se hele sikkerhedsfilterkæden:

Sikkerhedsfilterkæde: [WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter LogoutFilter UsernamePasswordAuthenticationFilter // ...]

3. Logning

Dernæst finder vi vores sikkerhedsfiltre ved at aktivere logning af FilterChainProxy.

Vi kan aktivere logning ved at tilføje følgende linje til application.properties:

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

Her er den relaterede log:

DEBUG o.s.security.web.FilterChainProxy - / foos / 1 i position 1 af 12 i yderligere filterkæde; affyringsfilter: 'WebAsyncManagerIntegrationFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 i position 2 af 12 i yderligere filterkæde; affyringsfilter: 'SecurityContextPersistenceFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 i position 3 af 12 i yderligere filterkæde; fyringsfilter: 'HeaderWriterFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 i position 4 af 12 i yderligere filterkæde; affyringsfilter: 'LogoutFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 i position 5 af 12 i yderligere filterkæde; affyringsfilter: 'UsernamePasswordAuthenticationFilter' ...

4. Hentning af filtre programmatisk

Nu skal vi se, hvordan man får de registrerede sikkerhedsfiltre programmatisk.

Vi bruger FilterChainProxy for at få sikkerhedsfiltrene.

Lad os først tråde ledningen springSecurityFilterChain bønne:

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

Her brugte vi en @Kvalifikator med navnet springSecurityFilterChain med type Filter i stedet for FilterChainProxy. Dette er fordi metoden til springSecurityFilterChain () i Websikkerhedskonfiguration, som skaber Spring Security filterkæde, returtype Filter og ikke FilterChainProxy.

Derefter kaster vi dette objekt til FilterChainProxy og ring til getFilterChains () metode:

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

Og her er et eksempel på output:

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

Bemærk, at siden Spring Security 3.1, FilterChainProxy er konfigureret ved hjælp af en liste over SecurityFilterChain. De fleste applikationer har dog kun brug for en SecurityFilterChain.

5. Vigtige forårssikkerhedsfiltre

Lad os endelig se på nogle af de vigtige sikkerhedsfiltre:

  • BrugernavnPasswordAuthenticationFilter: procesgodkendelse, svarer som standard på “/ login” URL
  • Anonym godkendelsesfilter: når der ikke er noget godkendelsesobjekt i SecurityContextHolder, opretter det et anonymt godkendelsesobjekt og placerer det der
  • FilterSecurityInterceptor: hæve undtagelser, når adgang nægtes
  • UndtagelseTranslationFilter: fang undtagelser for forårssikkerhed

6. Konklusion

I disse hurtige artikler undersøgte vi, hvordan man finder de registrerede Spring Security-filtre programmatisk og ved hjælp af logfiler.

Som altid kan kildekoden findes på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found