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:
- TransactionFilter - spustiť a vykonať transakcie
- 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.