Nájdite registrované jarné bezpečnostné filtre

1. Prehľad

Jarná bezpečnosť je založená na reťazci filtrov servletov. Každý filter má konkrétnu zodpovednosť a v závislosti od konfigurácie sa filtre pridávajú alebo odoberajú.

V tomto návode prediskutujeme rôzne spôsoby, ako nájsť registrované jarné bezpečnostné filtre.

2. Ladenie bezpečnosti

Najskôr povolíme ladenie zabezpečenia, ktoré pri každej žiadosti zaznamená podrobné bezpečnostné informácie.

Ladenie zabezpečenia môžeme povoliť pomocou ladiť nehnuteľnosť:

@EnableWebSecurity (ladenie = pravda)

Týmto spôsobom, keď pošleme žiadosť na server, všetky informácie o žiadosti sa zaprotokolujú.

Uvidíme tiež celý reťazec bezpečnostných filtrov:

Reťazec filtra zabezpečenia: [WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter LogoutFilter UsernamePasswordAuthenticationFilter // ...]

3. Prihlásenie

Ďalej nájdeme naše bezpečnostné filtre povolením protokolovania pre FilterChainProxy.

Prihlásenie môžeme povoliť pridaním nasledujúceho riadku do application.properties:

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

Tu je súvisiaci denník:

DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na pozícii 1 z 12 v ďalšom filtračnom reťazci; vypaľovací filter: 'WebAsyncManagerIntegrationFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na pozícii 2 z 12 v ďalšom reťazci filtra; vypaľovací filter: 'SecurityContextPersistenceFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na pozícii 3 z 12 v ďalšom reťazci filtra; vypaľovací filter: 'HeaderWriterFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na pozícii 4 z 12 v ďalšom reťazci filtra; vypaľovací filter: 'LogoutFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na pozícii 5 z 12 v ďalšom reťazci filtra; vypaľovací filter: „UsernamePasswordAuthenticationFilter“ ...

4. Programové získanie filtrov

Teraz uvidíme, ako programovo získať registrované bezpečnostné filtre.

Použijeme FilterChainProxy získať bezpečnostné filtre.

Najskôr si poďme autowire springSecurityFilterChain fazuľa:

@Autowired @Qualifier ("springSecurityFilterChain") súkromný filter springSecurityFilterChain;

Tu sme použili a @Qualifier s menom springSecurityFilterChain s typom Filtrovať namiesto FilterChainProxy. Je to preto, lebo metóda springSecurityFilterChain () v WebSecurityConfiguration, ktorý vytvára reťazec filtra pruženia zabezpečenia, návratový typ Filtrovať a nie FilterChainProxy.

Ďalej tento objekt vrhneme na FilterChainProxy a zavolajte na getFilterChains () metóda:

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

A tu je ukážka výstupu:

trieda org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter trieda org.springframework.security.web.context.SecurityContextPersistenceFilter trieda org.springframework.security.web.header.ileadwork.riter.ileadwork.rit .logout.LogoutFilter - trieda org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter ...

Upozorňujeme, že od jarnej verzie 3.1 FilterChainProxy je nakonfigurovaný pomocou zoznamu SecurityFilterChain. Väčšina aplikácií však potrebuje iba jednu SecurityFilterChain.

5. Dôležité jarné bezpečnostné filtre

Na záver sa pozrime na niektoré dôležité bezpečnostné filtre:

  • UsernamePasswordAuthenticationFilter: autentifikácia procesu, štandardne reaguje na „/ login“ URL
  • AnonymousAuthenticationFilter: ak v SecurityContextHolder nie je žiadny autentifikačný objekt, vytvorí sa anonymný autentifikačný objekt a umiestni ho tam
  • FilterSecurityInterceptor: zvýšiť výnimky, ak je prístup odmietnutý
  • ExceptionTranslationFilter: chyťte jarné bezpečnostné výnimky

6. Záver

V tomto rýchlom článku sme skúmali, ako programovo a pomocou protokolov vyhľadať zaregistrované filtre Spring Security.

Ako vždy, zdrojový kód nájdete na GitHub.


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