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:
- TransactionFilter - za pokretanje i izvršavanje transakcija
- 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.