Bagaimana Menentukan Filter Spring Boot?

1. Ikhtisar

Dalam tutorial singkat ini, kita akan menjelajahi cara menentukan filter kustom dan menentukan urutan permintaannya dengan bantuan Spring Boot.

2. Menentukan Filter dan Perintah Permintaan

Mari kita mulai dengan membuat dua filter:

  1. TransactionFilter - untuk memulai dan melakukan transaksi
  2. RequestResponseLoggingFilter - untuk mencatat permintaan dan tanggapan

Untuk membuat filter, kita hanya perlu mengimplementasikan antarmuka Filter :

@Component @Order(1) public class TransactionFilter implements Filter { @Override public void doFilter ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request;         LOG.info( "Starting a transaction for req : {}", req.getRequestURI());         chain.doFilter(request, response);         LOG.info( "Committing a transaction for req : {}", req.getRequestURI()); } // other methods } 
@Component @Order(2) public class RequestResponseLoggingFilter implements Filter { @Override public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; HttpServletResponse res = (HttpServletResponse) response; LOG.info( "Logging Request {} : {}", req.getMethod(), req.getRequestURI()); chain.doFilter(request, response); LOG.info( "Logging Response :{}", res.getContentType()); } // other methods } 

Agar Spring dapat mengenali filter, kami perlu mendefinisikannya sebagai kacang dengan anotasi @Component .

Dan, agar filter diaktifkan dalam urutan yang benar - kami perlu menggunakan anotasi @Order .

2.1. Filter Dengan Pola URL

Dalam contoh di atas, filter kami terdaftar secara default untuk semua URL di aplikasi kami. Namun, terkadang kami ingin filter hanya diterapkan pada pola URL tertentu.

Dalam kasus ini, kita harus menghapus anotasi @Component dari definisi kelas filter dan mendaftarkan filter menggunakan FilterRegistrationBean :

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

Sekarang filter hanya akan berlaku untuk jalur yang cocok dengan pola / users / * .

Untuk menyetel pola URL untuk filter, kita bisa menggunakan metode addUrlPatterns () atau setUrlPatterns () .

3. Contoh Cepat

Sekarang mari buat titik akhir sederhana dan kirim permintaan HTTP ke sana:

@RestController @RequestMapping("/users") public class UserController { @GetMapping() public List getAllUsers() { // ... } }

Log aplikasi saat mencapai API ini adalah:

23:54:38 INFO com.spring.demo.TransactionFilter - Starting Transaction for req :/users 23:54:38 INFO c.s.d.RequestResponseLoggingFilter - Logging Request GET : /users ... 23:54:38 INFO c.s.d.RequestResponseLoggingFilter - Logging Response :application/json;charset=UTF-8 23:54:38 INFO com.spring.demo.TransactionFilter - Committing Transaction for req :/users

Ini mengonfirmasi bahwa filter dipanggil dalam urutan yang diinginkan.

4. Kesimpulan

Di artikel ini, kami telah merangkum cara menentukan filter kustom di aplikasi web Spring Boot.

Seperti biasa, potongan kode dapat ditemukan di GitHub.