Ako definovať jarný bootovací filter?

1. Prehľad

V tomto rýchlom výučbe preskúmame, ako definovať vlastné filtre a určiť ich poradie vyvolania pomocou Spring Boot.

2. Definovanie filtrov a objednávka vyvolania

Začnime vytvorením dvoch filtrov:

  1. TransactionFilter - spustiť a vykonať transakcie
  2. RequestResponseLoggingFilter - zaznamenávať žiadosti a odpovede

Aby sme vytvorili filter, musíme jednoducho implementovať Filtrovať rozhranie:

@Component @Order (1) verejná trieda TransactionFilter implementuje filter {@Override public void doFilter požiadavka ServletRequest, odpoveď ServletResponse, reťazec FilterChain) hodí IOException, ServletException {HttpServletRequest req = (HttpServletRequest) požiadavka; LOG.info ("Spustenie transakcie pre požiadavku: {}", req.getRequestURI ()); chain.doFilter (požiadavka, odpoveď); LOG.info ("Potvrdenie transakcie pre požiadavku: {}", req.getRequestURI ()); } // ďalšie metódy} 
@Component @Order (2) verejná trieda RequestResponseLoggingFilter implementuje filter {@Override public void doFilter (požiadavka ServletRequest, odpoveď ServletResponse, reťazec FilterChain) hodí IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) odpoveď; LOG.info ("Požiadavka na prihlásenie {}: {}", req.getMethod (), req.getRequestURI ()); chain.doFilter (požiadavka, odpoveď); LOG.info ("Odpoveď na protokoly: {}", res.getContentType ()); } // ďalšie metódy} 

Aby Spring dokázala rozpoznať filter, museli sme ho definovať ako fazuľu s @ Komponent anotácia.

A aby sa filtre zapálili v správnom poradí - museli sme použiť @Objednať anotácia.

2.1. Filtrovať podľa vzoru adresy URL

V príklade vyššie sú naše filtre predvolene registrované pre všetky adresy URL v našej aplikácii. Niekedy však môžeme chcieť, aby sa filter vzťahoval iba na určité vzory adries URL.

V takom prípade musíme odstrániť @ Komponent anotácia z definície triedy filtra a zaregistrujte filter pomocou a FilterRegistrationBean:

@Bean public FilterRegistrationBean loggingFilter () {FilterRegistrationBean registrationBean = nový FilterRegistrationBean (); registrationBean.setFilter (new RequestResponseLoggingFilter ()); registrationBean.addUrlPatterns ("/ users / *"); návrat registračná fazuľa; }

Teraz bude filter platiť iba pre cesty, ktoré sa zhodujú s / users / * vzor.

Na nastavenie vzorov adries URL pre filter môžeme použiť addUrlPatterns () alebo setUrlPatterns () metódy.

3. Rýchly príklad

Poďme teraz vytvoriť jednoduchý koncový bod a poslať mu požiadavku HTTP:

@RestController @RequestMapping ("/ users") verejná trieda UserController {@GetMapping () verejný zoznam getAllUsers () {// ...}}

Protokoly aplikácií pri zasiahnutí tohto rozhrania API sú:

23:54:38 INFO com.spring.demo.TransactionFilter - Počiatočná transakcia pre dopyt: / users 23:54:38 INFO csdRequestResponseLoggingFilter - Požiadavka na prihlásenie ZÍSKAŤ: / users ... 23:54:38 INFO csdRequestResponseLoggingFilter - Odpoveď na logovanie : application / json; charset = UTF-8 23:54:38 INFO com.spring.demo.TransactionFilter - Committing Transaction for req: / users

Potvrdzuje sa tým, že filtre sa vyvolávajú v požadovanom poradí.

4. Záver

V tomto článku sme zhrnuli, ako definovať vlastné filtre vo webovej aplikácii Spring Boot.

Útržky kódu ako vždy nájdete na GitHub.


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