Hvordan definere et støvelfilter?
1. Oversikt
I denne raske opplæringen vil vi utforske hvordan du definerer egendefinerte filtre og spesifiserer påkallingsrekkefølgen ved hjelp av Spring Boot.
2. Definere filtre og påkallingsordren
La oss starte med å lage to filtre:
- TransactionFilter - å starte og begå transaksjoner
- RequestResponseLoggingFilter - for å logge forespørsler og svar
For å lage et filter, må vi bare implementere Filter grensesnitt:
@Component @Order (1) offentlig klasse TransactionFilter implementerer filter {@Override public void doFilter ServletRequest request, ServletResponse response, FilterChain chain) throw IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request; LOG.info ("Starter en transaksjon for req: {}", req.getRequestURI ()); chain.doFilter (forespørsel, svar); LOG.info ("Forplikter en transaksjon for req: {}", req.getRequestURI ()); } // andre metoder}
@Component @Order (2) offentlig klasse RequestResponseLoggingFilter implementerer filter {@Override public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) kaster IOException, ServletException {HttpServletRequest req = (HttpServletRequest) HttpServletResponse res = (HttpServletResponse) respons; LOG.info ("Loggningsanmodning {}: {}", req.getMethod (), req.getRequestURI ()); chain.doFilter (forespørsel, svar); LOG.info ("Logging Response: {}", res.getContentType ()); } // andre metoder}
For at våren skulle kunne gjenkjenne et filter, trengte vi å definere det som en bønne med @Komponent kommentar.
Og for å få filtrene til å skyte i riktig rekkefølge - vi trengte å bruke @Rekkefølge kommentar.
2.1. Filtrer med URL-mønster
I eksemplet ovenfor er filtrene våre registrert som standard for alle URL-ene i applikasjonen vår. Vi kan imidlertid noen ganger ønske at et filter bare gjelder for bestemte URL-mønstre.
I dette tilfellet må vi fjerne @Komponent kommentar fra definisjonen av filterklassen og registrer filteret ved hjelp av a FilterRegistrationBean:
@Bean public FilterRegistrationBean loggingFilter () {FilterRegistrationBean registrationBean = new FilterRegistrationBean (); registrationBean.setFilter (ny RequestResponseLoggingFilter ()); registrationBean.addUrlPatterns ("/ brukere / *"); retur registrering Bean; }
Nå vil filteret bare gjelde for stier som samsvarer med / brukere / * mønster.
For å angi URL-mønstre for filteret, kan vi bruke addUrlPatterns () eller setUrlPatterns () metoder.
3. Et raskt eksempel
La oss nå opprette et enkelt endepunkt og sende en HTTP-forespørsel til det:
@RestController @RequestMapping ("/ brukere") offentlig klasse UserController {@GetMapping () offentlig liste getAllUsers () {// ...}}
Applikasjonsloggene for å treffe denne APIen er:
23:54:38 INFO com.spring.demo.TransactionFilter - Starter transaksjon for forespørsel: / brukere 23:54:38 INFO csdRequestResponseLoggingFilter - Logging Request GET: / users ... 23:54:38 INFO csdRequestResponseLoggingFilter - Logging Response : application / json; charset = UTF-8 23:54:38 INFO com.spring.demo.TransactionFilter - Forpliktende transaksjon for req: / brukere
Dette bekrefter at filtre påkalles i ønsket rekkefølge.
4. Konklusjon
I denne artikkelen har vi oppsummert hvordan du definerer egendefinerte filtre i en Spring Boot-webapp.
Som alltid kan du finne kodebiter på GitHub.