Hogyan lehet meghatározni a tavaszi csomagtartó szűrőt?
1. Áttekintés
Ebben a gyors bemutatóban megvizsgáljuk, hogyan definiálhatunk egyéni szűrőket és megadhatjuk azok meghívási sorrendjét a Spring Boot segítségével.
2. A szűrők és a meghívási sorrend meghatározása
Kezdjük két szűrő létrehozásával:
- TransactionFilter - tranzakciók indítása és elkötelezése
- RequestResponseLoggingFilter - kérések és válaszok naplózása
Szűrő létrehozásához egyszerűen végre kell hajtanunk a Szűrő felület:
A @Component @Order (1) public class TransactionFilter végrehajtja a Filter {@Override public void doFilter ServletRequest kérés, ServletResponse válasz, FilterChain lánc) IOException, ServletException {HttpServletRequest req = (HttpServletRequest) kérést; LOG.info ("Tranzakció indítása a req számára: {}", req.getRequestURI ()); chain.doFilter (kérés, válasz); LOG.info ("Tranzakció végrehajtása a lekérdezéshez: {}", req.getRequestURI ()); } // egyéb módszerek}
A @Component @Order (2) public class RequestResponseLoggingFilter végrehajtja a Filter {@Override public void doFilter (ServletRequest kérés, ServletResponse válasz, FilterChain lánc) IOException, ServletException {HttpServletRequest req = (HttpServlet) = (HttpServlet Request; HttpServletResponse res = (HttpServletResponse) válasz; LOG.info ("Naplózási kérelem {}: {}", req.getMethod (), req.getRequestURI ()); chain.doFilter (kérés, válasz); LOG.info ("Naplózási válasz: {}", res.getContentType ()); } // egyéb módszerek}
Annak érdekében, hogy Spring felismerhessen egy szűrőt, meg kellett határoznunk azt babként a @Összetevő annotáció.
És ahhoz, hogy a szűrők megfelelő sorrendben működjenek - használnunk kellett a @Rendelés annotáció.
2.1. Szűrés URL-mintával
A fenti példában szűrőinket alapértelmezés szerint regisztráltuk az alkalmazásunk összes URL-jére. Előfordulhat, hogy néha azt szeretnénk, ha egy szűrő csak bizonyos URL-mintákra vonatkozna.
Ebben az esetben el kell távolítanunk a @Összetevő annotáció a szűrőosztály definíciójából és regisztrálja a szűrőt a segítségével FilterRegistrationBean:
@Bean public FilterRegistrationBean loggingFilter () {FilterRegistrationBean registrationBean = új FilterRegistrationBean (); registrationBean.setFilter (új RequestResponseLoggingFilter ()); registrationBean.addUrlPatterns ("/ felhasználók / *"); visszatérési regisztrációBean; }
A szűrő csak azokra az utakra vonatkozik, amelyek megfelelnek a / users / * minta.
A szűrő URL-mintáinak beállításához használhatjuk a addUrlPatterns () vagy setUrlPatterns () mód.
3. Gyors példa
Hozzunk létre most egy egyszerű végpontot, és küldjünk neki HTTP-kérést:
@RestController @RequestMapping ("/ users") public class UserController {@GetMapping () public list getAllUsers () {// ...}}
Az alkalmazás naplói az API elérésekor a következők:
23:54:38 INFO com.spring.demo.TransactionFilter - Tranzakció indítása a lekérdezéshez: / felhasználók 23:54:38 INFO csdRequestResponseLoggingFilter - Naplózási kérelem GET: / felhasználók ... 23:54:38 INFO csdRequestResponseLoggingFilter - Naplózási válasz : application / json; charset = UTF-8 23:54:38 INFO com.spring.demo.TransactionFilter - Tranzakció végrehajtása a kérdéshez: / felhasználók
Ez megerősíti, hogy a szűrőket a kívánt sorrendben hívják meg.
4. Következtetés
Ebben a cikkben összefoglaltuk, hogyan definiálhatunk egyéni szűrőket a Spring Boot webappban.
Mint mindig, a kódrészletek is megtalálhatók a GitHubon.