Prehľad a potreba DelegatingFilterProxy na jar

1. Prehľad

The DelegatingFilterProxy je servletový filter, ktorý umožňuje odovzdať riadenie do Filtrovať triedy, ktoré majú prístup k kontextu jarných aplikácií. Jarná bezpečnosť sa do veľkej miery spolieha na túto techniku.

V tomto výučbe sa tomu budeme podrobne venovať.

2. DelegatingFilterProxy

Javadoc pre DelegatingFilterProxy uvádza, že ide o

Proxy server pre štandardný filter servletov, delegovaný na fazuľu spravovanú Springom, ktorá implementuje rozhranie filtra.

Pri použití filtrov servletu ich samozrejme musíme deklarovať ako a trieda filtra v našej konfigurácii Java alebo web.xml, inak ich bude servletový kontajner ignorovať. Spring’s DelegatingFilterProxy poskytuje spojenie medzi web.xml a kontext aplikácie.

2.1. Interná práca z DelegatingFilterProxy

Poďme sa pozrieť na to, ako DelegatingFilterProxy prenáša kontrolu na našu jarnú fazuľu.

Počas inicializácie DelegatingFilterProxy načíta názov-filtra a získa fazuľu s týmto menom z jarného aplikačného kontextu. Táto fazuľa musí byť typu javax.Servlet.Filter, tj. „normálny“ servletový filter. Prichádzajúce požiadavky sa potom odošlú do tohto fazuľa filtra.

V skratke, DelegatingFilterProxydoFilter () metóda deleguje všetky hovory na Spring bean, čo nám umožní využívať všetky Spring funkcie v našom filtri bean.

Ak používame konfiguráciu založenú na prostredí Java, je potrebné zaregistrovať náš filter ApplicationInitializer bude definované ako:

@Override chránený javax.servlet.Filter [] getServletFilters () {DelegatingFilterProxy delegateFilterProxy = nový DelegatingFilterProxy (); delegateFilterProxy.setTargetBeanName ("applicationFilter"); vrátiť nový filter [] {delegateFilterProxy}; }

Ak použijeme XML, potom v web.xml spis:

 applicationFilter org.springframework.web.filter.DelegatingFilterProxy 

To znamená, že je možné zadať ľubovoľnú požiadavku na prechod cez filter definovaný ako Spring bean s názvom applicationFilter.

2.2. Potreba DelegatingFilterProxy

DelegatingFilterProxy je trieda v jarnom webovom module. Poskytuje funkcie na uskutočňovanie hovorov HTTP cez filtre pred dosiahnutím skutočného cieľa. S pomocou DelegatingFilterProxy, trieda implementujúca javax.Servlet.Filter rozhranie môže byť zapojené do filtračnej reťaze.

Napríklad Spring Security využíva DelegatingFilterProxy aby mohol využiť výhody funkcií jarného vkladania závislostí a rozhraní životného cyklu pre bezpečnostné filtre.

DelegatingFilterProxy tiež využíva vyvolanie špecifických alebo viacerých filtrov podľa ciest URI požiadavky tým, že poskytuje konfiguráciu v kontexte aplikácie Spring alebo v web.xml.

3. Vytvorenie vlastného filtra

Ako je opísané vyššie, DelegatingFilterProxy je servletový filter, ktorý sa deleguje na konkrétnu fazuľu riadenú Spring, ktorá implementuje Filtrovať Rozhranie.

V nasledujúcich niekoľkých častiach vytvoríme vlastný filter a nakonfigurujeme ho pomocou konfigurácie založenej na prostredí Java a XML.

3.1. Trieda filtra

Chystáme sa vytvoriť jednoduchý filter, ktorý zaznamená informácie o žiadosti skôr, ako bude žiadosť pokračovať.

Najprv si vytvorme vlastnú triedu filtra:

@Component ("loggingFilter") verejná trieda CustomFilter implementuje filter {private static Logger LOGGER = LoggerFactory.getLogger (CustomFilter.class); @Override public void init (FilterConfig config) hodí ServletException {// inicializovať niečo} @Override public void doFilter (požiadavka ServletRequest, odpoveď ServletResponse, reťazec FilterChain) hodí IOException, ServletException {HttpServletRequest req = (HttpServletRequest) LOGGER.info ("Žiadosť o informácie:" + požiadavka); chain.doFilter (požiadavka, odpoveď); } @Override public void zničiť () {// vyčistiť kód, ak je to potrebné}} 

CustomFilter náradie javax.Servlet.Filter. Táto trieda má a @ Komponent anotáciu zaregistrovať ako Spring bean v kontexte aplikácie. Týmto spôsobom DelegatingFilterProxy trieda môže nájsť našu triedu filtrov pri inicializácii filtračného reťazca.

Názov jarnej fazule musí byť rovnaký ako názov v názov-filtra poskytnuté počas registrácie vlastného filtra v ApplicationInitializer triedy alebo v web.xml neskôr pretože DelegatingFilterProxy trieda vyhľadá fazuľu filtra s presne rovnakým názvom v kontexte aplikácie.

Ak nenájde fazuľu s týmto menom, vyvolá pri štarte aplikácie výnimku.

3.2. Konfigurácia filtra pomocou konfigurácie Java

Ak chcete zaregistrovať vlastný filter pomocou konfigurácie Java, musíme prepísať getServletFilters () metóda AbstractAnnotationConfigDispatcherServletInitializer:

verejná trieda ApplicationInitializer rozširuje AbstractAnnotationConfigDispatcherServletInitializer {// niektoré ďalšie metódy tu @Override chránený javax.servlet.Filter [] getServletFilters () {DelegatingFilterProxy delegateFilterProxy = nový DelegatingFilterProxy (); delegateFilterProxy.setTargetBeanName ("loggingFilter"); vrátiť nový filter [] {delegateFilterProxy}; }}

3.3. Konfigurácia filtra pomocou web.xml

Pozrime sa, ako je konfigurácia filtra v web.xml vyzerá ako:

 loggingFilter org.springframework.web.filter.DelegatingFilterProxy loggingFilter / * 

The trieda filtra argument je typu DelegatingFilterProxy a nie trieda filtra, ktorú sme vytvorili. Ak spustíme tento kód a narazíme na ľubovoľnú adresu URL, potom doFilter () metóda CustomFilter sa vykoná a v súbore protokolu zobrazí podrobnosti o podrobnostiach žiadosti.

4. Záver

V tomto článku sme sa venovali tomu, ako DelegatingFilterProxy funguje a ako ho používať.

Jarná bezpečnosť vo veľkej miere využíva DelegatingFilterProxy na zabezpečenie hovorov a zdrojov webového API pred neoprávneným prístupom.

Zdrojový kód je k dispozícii na GitHub.


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