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:

  1. TransactionFilter - å starte og begå transaksjoner
  2. 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.


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