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:

  1. TransactionFilter - tranzakciók indítása és elkötelezése
  2. 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.