Kako definirati proljetni filter za pokretanje?

1. Pregled

U ovom brzom vodiču istražit ćemo kako definirati prilagođene filtre i odrediti njihov redoslijed pozivanja uz pomoć Spring Boot-a.

2. Definiranje filtara i naloga za poziv

Počnimo s izradom dva filtra:

  1. TransactionFilter - za pokretanje i izvršavanje transakcija
  2. RequestResponseLoggingFilter - za bilježenje zahtjeva i odgovora

Da bismo stvorili filtar, moramo jednostavno implementirati filtar sučelje:

@Component @Order (1) javna klasa TransactionFilter provodi filtar {@Override public void doFilter zahtjev za ServletRequest, odgovor ServletResponse, lanac FilterChain) baca IOException, ServletException {HttpServletRequest zahtjev = (HttpServletRequest); LOG.info ("Pokretanje transakcije za req: {}", req.getRequestURI ()); chain.doFilter (zahtjev, odgovor); LOG.info ("Predavanje transakcije za req: {}", req.getRequestURI ()); } // ostale metode} 
@Component @Order (2) javna klasa RequestResponseLoggingFilter implementira Filter {@Override public void doFilter (ServletRequest zahtjev, ServletResponse response, FilterChain chain) baca IOException, ServletException {HttpServletRequest req = (HttpServletRequest req = (HttpServletRequest Req = (HttpServletRequestReq =v HttpServletResponse res = (HttpServletResponse) odgovor; LOG.info ("Zahtjev za bilježenje {}: {}", req.getMethod (), req.getRequestURI ()); chain.doFilter (zahtjev, odgovor); LOG.info ("Zapisivanje odgovora: {}", res.getContentType ()); } // ostale metode} 

Da bi Spring mogao prepoznati filtar, morali smo ga definirati kao grah s @Komponenta bilješka.

Da bi se filtri aktivirali u pravom redoslijedu - morali smo koristiti @Narudžba bilješka.

2.1. Filtriraj s uzorkom URL-a

U gornjem primjeru, naši su filtri prema zadanim postavkama registrirani za sve URL-ove u našoj aplikaciji. Međutim, možda ćemo ponekad htjeti da se filtar odnosi samo na određene uzorke URL-a.

U ovom slučaju moramo ukloniti @Komponenta napomena iz definicije klase filtra i registrirajte filtar pomoću a FilterRegistrationBean:

@Bean public FilterRegistrationBean loggingFilter () {FilterRegistrationBean registrationBean = novi FilterRegistrationBean (); registrationBean.setFilter (novi RequestResponseLoggingFilter ()); registrationBean.addUrlPatterns ("/ users / *"); povrat registracijeBean; }

Sada će se filtar primijeniti samo na staze koje se podudaraju s / users / * uzorak.

Da bismo postavili uzorke URL-a za filtar, možemo koristiti addUrlPatterns () ili setUrlPatterns () metode.

3. Brzi primjer

Stvorimo sada jednostavnu krajnju točku i pošaljite joj HTTP zahtjev:

@RestController @RequestMapping ("/ users") javna klasa UserController {@GetMapping () javni popis getAllUsers () {// ...}}

Zapisnici aplikacija o pristupanju ovom API-ju su:

23:54:38 INFO com.spring.demo.TransactionFilter - Pokretanje transakcije za req: / users 23:54:38 INFO csdRequestResponseLoggingFilter - Zahtjev za prijavu GET: / users ... 23:54:38 INFO csdRequestResponseLoggingFilter - Logging Response : application / json; charset = UTF-8 23:54:38 INFO com.spring.demo.TransactionFilter - Predavanje transakcije za req: / users

To potvrđuje da se filtri pozivaju u željenom redoslijedu.

4. Zaključak

U ovom smo članku saželi kako definirati prilagođene filtre u web aplikaciji Spring Boot.

Kao i uvijek, isječke koda možete pronaći na GitHubu.