Bagaimana Menentukan Penapis Boot Musim Semi?

1. Gambaran keseluruhan

Dalam tutorial ringkas ini, kita akan meneroka cara menentukan penapis tersuai dan menentukan urutan permintaannya dengan bantuan Spring Boot.

2. Menentukan Penapis dan Perintah Peminta

Mari mulakan dengan membuat dua penapis:

  1. TransactionFilter - untuk memulakan dan melakukan transaksi
  2. RequestResponseLoggingFilter - untuk log permintaan dan tindak balas

Untuk membuat penapis, kita hanya perlu melaksanakan antara muka Penapis :

@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 penapis, kami perlu menentukannya sebagai kacang dengan anotasi @Component .

Dan, agar penyaring dihidupkan dengan betul - kita perlu menggunakan anotasi @Order .

2.1. Tapis Dengan Corak URL

Dalam contoh di atas, penapis kami didaftarkan secara lalai untuk semua URL dalam aplikasi kami. Walau bagaimanapun, kita kadang-kadang mahu penapis hanya berlaku pada corak URL tertentu.

Dalam kes ini, kita harus membuang anotasi @Component dari definisi kelas penapis dan mendaftarkan penapis menggunakan FilterRegistrationBean :

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

Kini penapis hanya akan digunakan untuk laluan yang sesuai dengan corak / users / * .

Untuk menetapkan corak URL untuk penapis, kita dapat menggunakan kaedah addUrlPatterns () atau setUrlPatterns () .

3. Contoh Pantas

Sekarang mari buat titik akhir yang mudah dan hantarkan permintaan HTTP kepadanya:

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

Aplikasi log untuk memukul 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 mengesahkan bahawa penapis dipanggil mengikut urutan yang diinginkan.

4. Kesimpulan

Dalam artikel ini, kami telah meringkaskan cara menentukan penapis tersuai dalam aplikasi web Spring Boot.

Seperti biasa, coretan kod boleh didapati di GitHub.