Pronađite registrirane proljetne sigurnosne filtere

1. Pregled

Spring Security temelji se na lancu filtera za servlet. Svaki filtar ima određenu odgovornost i ovisno o konfiguraciji, filtri se dodaju ili uklanjaju.

U ovom vodiču, razgovarat ćemo o različitim načinima pronalaska registriranih proljetnih sigurnosnih filtara.

2. Otklanjanje pogrešaka u sigurnosti

Prvo ćemo omogućiti ispravljanje pogrešaka u sustavu koji će bilježiti detaljne sigurnosne informacije o svakom zahtjevu.

Otklanjanje pogrešaka u sustavu sigurnosti možemo omogućiti pomoću otklanjanje pogrešaka svojstvo:

@EnableWebSecurity (otklanjanje pogrešaka = točno)

Na taj način, kada pošaljemo zahtjev poslužitelju, svi podaci o zahtjevu bit će zabilježeni.

Također ćemo moći vidjeti cijeli lanac sigurnosnih filtara:

Lanac sigurnosnog filtra: [WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter LogoutFilter UsernamePasswordAuthenticationFilter // ...]

3. Sječa drva

Dalje, pronaći ćemo naše sigurnosne filtre tako što ćemo omogućiti bilježenje za FilterChainProxy.

Zapisivanje možemo omogućiti dodavanjem sljedećeg retka u primjena.svojstva:

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

Evo povezanog dnevnika:

DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na položaju 1 od 12 u dodatnom lancu filtra; pucanje Filter: 'WebAsyncManagerIntegrationFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na položaju 2 od 12 u dodatnom lancu filtra; pucanje Filter: 'SecurityContextPersistenceFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na položaju 3 od 12 u dodatnom lancu filtra; pucajući filter: 'HeaderWriterFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na položaju 4 od 12 u dodatnom lancu filtra; pucanje Filter: 'LogoutFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 na položaju 5 od 12 u dodatnom lancu filtra; pucajući filtar: 'UsernamePasswordAuthenticationFilter' ...

4. Programsko dobivanje filtara

Sada ćemo vidjeti kako programski dobiti registrirane sigurnosne filtre.

Koristit ćemo FilterChainProxy da biste dobili sigurnosne filtre.

Prvo, spojimo auto springSecurityFilterChain grah:

@Autowired @Qualifier ("springSecurityFilterChain") privatni filtar springSecurityFilterChain;

Ovdje smo koristili a @Kvalifikator s imenom springSecurityFilterChain s tipom filtar umjesto FilterChainProxy. To je zato što metoda springSecurityFilterChain () u WebSecurityConfiguration, koji stvara lanac filtra Spring Security, tip povratka filtar a ne FilterChainProxy.

Dalje, bacićemo ovaj objekt na FilterChainProxy i nazovite getFilterChains () metoda:

javna praznina getFilters () {FilterChainProxy filterChainProxy = (FilterChainProxy) springSecurityFilterChain; Popis popisa = filterChainProxy.getFilterChains (); list.stream () .flatMap (chain -> chain.getFilters (). stream ()) .forEach (filter -> System.out.println (filter.getClass ())); }

I evo primjera rezultata:

klasa org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter klasa org.springframework.security.web.context.SecurityContextPersistenceFilter klasa org.springframework.security.web.header.HeaderbworkeritsecurityWriteerBeermeyerWriterse .logout.LogoutFilter klasa org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter ...

Imajte na umu da od Spring Security 3.1, FilterChainProxy je konfiguriran pomoću popisa SecurityFilterChain. Međutim, većina aplikacija treba samo jednu SecurityFilterChain.

5. Važni proljetni sigurnosni filtri

Na kraju, pogledajmo neke od važnih sigurnosnih filtara:

  • UsernamePasswordAuthenticationFilter: postupak provjere autentičnosti, prema zadanim postavkama odgovara na URL „/ login“
  • AnonymousAuthenticationFilter: kada u SecurityContextHolder nema objekta za provjeru autentičnosti, on stvara anonimni objekt za provjeru autentičnosti i stavlja ga tamo
  • FilterSecurityInterceptor: povećati iznimke kada je pristup odbijen
  • ExceptionTranslationFilter: catch proljeće sigurnosne iznimke

6. Zaključak

U ovim kratkim člancima istražili smo kako programski i pomoću dnevnika pronaći registrirane filtre Spring Security.

Kao i uvijek, izvorni kod možete pronaći na GitHubu.


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