Sådan defineres et fjederstøvfilter?

1. Oversigt

I denne hurtige vejledning undersøger vi, hvordan vi definerer brugerdefinerede filtre og specificerer deres indkaldelsesrækkefølge ved hjælp af Spring Boot.

2. Definition af filtre og påkaldelsesordren

Lad os starte med at oprette to filtre:

  1. Transaktionsfilter - at starte og begå transaktioner
  2. RequestResponseLoggingFilter - til at logge anmodninger og svar

For at oprette et filter skal vi blot implementere Filter grænseflade:

@Component @Order (1) offentlig klasse TransactionFilter implementerer filter {@Override public void doFilter ServletRequest anmodning, ServletResponse svar, FilterChain chain) kaster IOException, ServletException {HttpServletRequest req = (HttpServletRequest) anmodning; LOG.info ("Start af en transaktion for req: {}", req.getRequestURI ()); chain.doFilter (anmodning, svar); LOG.info ("Forpligtelse til en transaktion for req: {}", req.getRequestURI ()); } // andre metoder} 
@Component @Order (2) offentlig klasse RequestResponseLoggingFilter implementerer filter {@Override public void doFilter (ServletRequest anmodning, ServletResponse svar, FilterChain kæde) kaster IOException, ServletException {HttpServletRequest req = (HttpServletRequest) HttpServletResponse res = (HttpServletResponse) svar; LOG.info ("Logging Request {}: {}", req.getMethod (), req.getRequestURI ()); chain.doFilter (anmodning, svar); LOG.info ("Logging Response: {}", res.getContentType ()); } // andre metoder} 

For at Spring kunne genkende et filter, var vi nødt til at definere det som en bønne med @Komponent kommentar.

Og for at få filtre til at fyre i den rigtige rækkefølge - vi havde brug for @Bestille kommentar.

2.1. Filtrer med URL-mønster

I eksemplet ovenfor er vores filtre som standard registreret for alle URL'erne i vores applikation. Vi kan dog nogle gange ønske, at et filter kun gælder for bestemte URL-mønstre.

I dette tilfælde skal vi fjerne @Komponent kommentar fra definitionen af ​​filterklassen og registrer filteret ved hjælp af en FilterRegistrationBean:

@Bean public FilterRegistrationBean loggingFilter () {FilterRegistrationBean registrationBean = ny FilterRegistrationBean (); registrationBean.setFilter (ny RequestResponseLoggingFilter ()); registrationBean.addUrlPatterns ("/ brugere / *"); returregistreringBønne; }

Nu gælder filteret kun for stier, der matcher / brugere / * mønster.

For at indstille URL-mønstre til filteret kan vi bruge addUrlPatterns () eller setUrlPatterns () metoder.

3. Et hurtigt eksempel

Lad os nu oprette et simpelt slutpunkt og sende en HTTP-anmodning til det:

@RestController @RequestMapping ("/ brugere") offentlig klasse UserController {@GetMapping () offentlig liste getAllUsers () {// ...}}

Applikationslogfilerne ved at ramme denne API er:

23:54:38 INFO com.spring.demo.TransactionFilter - Start af transaktion for forespørgsel: / brugere 23:54:38 INFO csdRequestResponseLoggingFilter - Loggingsanmodning GET: / brugere ... 23:54:38 INFO csdRequestResponseLoggingFilter - Logging Response : application / json; charset = UTF-8 23:54:38 INFO com.spring.demo.TransactionFilter - Forpligtende transaktion for anmodning: / brugere

Dette bekræfter, at filtre påberåbes i den ønskede rækkefølge.

4. Konklusion

I denne artikel har vi opsummeret, hvordan man definerer brugerdefinerede filtre i en Spring Boot-webapp.

Som altid kan kodeuddrag findes på GitHub.