Keresse meg a regisztrált tavaszi biztonsági szűrőket
1. Áttekintés
A Spring Security a servlet szűrők láncolatán alapul. Minden szűrőnek külön felelőssége van, és a konfigurációtól függően szűrőket ad hozzá vagy távolít el.
Ebben az oktatóanyagban megbeszéljük a regisztrált tavaszi biztonsági szűrők megtalálásának különböző módjait.
2. Biztonsági hibakeresés
Először engedélyezzük a biztonsági hibakeresést, amely naplózza a részletes biztonsági információkat minden egyes kérésnél.
A. Segítségével engedélyezhetjük a biztonsági hibakeresést hibakeresés ingatlan:
@EnableWebSecurity (hibakeresés = true)
Ily módon, amikor kérést küldünk a szervernek, az összes kérelem információ naplózásra kerül.
Megtekinthetjük a teljes biztonsági szűrő láncot is:
Biztonsági szűrőlánc: [WebAsyncManagerIntegrationFilter SecurityContextPersistenceFilter HeaderWriterFilter LogoutFilter UsernamePasswordAuthenticationFilter // ...]
3. Naplózás
Ezután megtaláljuk a biztonsági szűrőket azáltal, hogy engedélyezzük a. Naplózását FilterChainProxy.
A naplózást a következő sor hozzáadásával engedélyezhetjük alkalmazás.tulajdonságok:
logging.level.org.springframework.security.web.FilterChainProxy = DEBUG
Itt van a kapcsolódó napló:
DEBUG o.s.security.web.FilterChainProxy - / foos / 1 a 12/1-es pozícióban további szűrő láncban; a következő szűrő kilövése: 'WebAsyncManagerIntegrationFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 a 12/2-es pozícióban további szűrő láncban; Szűrő kilövése: 'SecurityContextPersistenceFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 a 12/3-as 3-as pozícióban további szűrő láncban; égető szűrő: 'HeaderWriterFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 a 12-es 4-es pozíciójában további szűrő láncban; a szűrő kilövése: 'LogoutFilter' DEBUG o.s.security.web.FilterChainProxy - / foos / 1 a 12-es 5-ös helyzetében további szűrő láncban; Szűrő indítása: 'UsernamePasswordAuthenticationFilter' ...
4. A szűrők programszerű megszerzése
Most meglátjuk, hogyan lehet programszerűen beszerezni a regisztrált biztonsági szűrőket.
Majd használjuk FilterChainProxy hogy megkapja a biztonsági szűrőket.
Először írjuk be a springSecurityFilterChain bab:
@Autowired @Qualifier ("springSecurityFilterChain") privát Filter springSecurityFilterChain;
Itt a @ Minősítő a névvel springSecurityFilterChain típussal Szűrő ahelyett FilterChainProxy. Ennek oka, hogy a módszer springSecurityFilterChain () ban ben WebSecurityConfiguration, amely létrehozza a Spring Security szűrő láncot, visszatérési típust Szűrő és nem FilterChainProxy.
Ezután erre az objektumra vetjük FilterChainProxy és felhívja a getFilterChains () módszer:
public void getFilters () {FilterChainProxy filterChainProxy = (FilterChainProxy) springSecurityFilterChain; Lista lista = filterChainProxy.getFilterChains (); list.stream () .flatMap (lánc -> chain.getFilters (). stream ()) .forEach (szűrő -> System.out.println (filter.getClass ())); }
És itt van egy minta kimenet:
class org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter class org.springframework.security.web.context.SecurityContextPersistenceFilter class org.springframework.security.web.header.HeaderWriterWrit .logout.LogoutFilter osztály org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter ...
Vegye figyelembe, hogy a tavaszi Security 3.1 óta FilterChainProxy konfigurálása a SecurityFilterChain. A legtöbb alkalmazásnak azonban csak egy kell SecurityFilterChain.
5. Fontos tavaszi biztonsági szűrők
Végül vessünk egy pillantást néhány fontos biztonsági szűrőre:
- FelhasználónévPasswordAuthenticationFilter: hitelesítési folyamat, alapértelmezés szerint válaszol a “/ login” URL-re
- AnonymousAuthenticationFilter: ha nincs hitelesítési objektum a SecurityContextHolderben, akkor létrehoz egy névtelen hitelesítési objektumot, és oda teszi
- FilterSecurityInterceptor: kivételeket vet fel, ha a hozzáférést megtagadják
- ExceptionTranslationFilter: elkapni a Spring Security kivételeket
6. Következtetés
Ebben a rövid cikkekben azt kutattuk, hogyan lehet programszerűen és naplók segítségével megtalálni a regisztrált Spring Security szűrőket.
Mint mindig, a forráskód megtalálható a GitHubon.