1. Spring Interceptor là gì?
Trong Spring , khi một request được gửi đến controller, trước khi request được xử lý bởi Controller, nó phải vượt qua các Interceptor (0 hoặc nhiều).
Spring Interceptor là một khái niệm khá giống với Servlet Filter.
Spring Interceptor chỉ áp dụng đối với các request đang được gửi đến một Controller.
Bạn có thể sử dụng Interceptor để làm một số việc, chẳng hạn như ghi lại Log, thêm hoặc cập nhập các cấu hình trước khi request được xử lý bởi Controller, ... Một trong các ứng dụng Spring Boot Mvc có sử dụng Interceptor là "Ứng dụng web đa ngôn ngữ"
- Lớp Interceptor của bạn cần phải thực hiện interface org.springframework.web.servlet.HandlerInterceptor hoặc mở rộng từ lớp org.springframework.web.servlet.handler.HandlerInterceptorAdapter.
Bạn cần phải triển khai 3 phương thức trừu tượng:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
Chú ý: phương thức preHandle trả về true hoặc false. Nếu trả về true nghĩa là request sẽ tiếp tục đi tới đích của nó (Là một Controller) .
- Một request có thể phải vượt qua nhiều Interceptor
2. Giống và khác nhau giữa Filter và Interceptor trong Java Spring
Filter và Interceptor là hai thành phần khác nhau được sử dụng trong Spring MVC để thực hiện các tác vụ trước hoặc sau khi một yêu cầu HTTP được xử lý.
Filter là một thành phần được triển khai bởi lớp javax.servlet.Filter. Filter được gọi trước khi một yêu cầu HTTP được xử lý bởi một bộ điều khiển. Filter có thể được sử dụng để thực hiện các tác vụ như:
- Thêm hoặc thay đổi đầu đề HTTP.
- Kiểm tra quyền của người dùng.
- Ghi nhật ký hoạt động của người dùng.
- Thống kê thời gian phản hồi của yêu cầu.
Interceptor là một thành phần được triển khai bởi giao diện org.springframework.web.servlet.HandlerInterceptor. Interceptor được gọi trước hoặc sau khi một yêu cầu HTTP được xử lý bởi một bộ điều khiển. Interceptor có thể được sử dụng để thực hiện các tác vụ tương tự như filter.
Sự khác biệt chính giữa filter và interceptor là filter được gọi trước khi bộ điều khiển được gọi, trong khi interceptor được gọi sau khi bộ điều khiển được gọi. Điều này có nghĩa là filter có thể được sử dụng để thực hiện các tác vụ mà không cần biết bộ điều khiển nào sẽ được gọi. Interceptor, mặt khác, chỉ có thể được sử dụng để thực hiện các tác vụ liên quan đến bộ điều khiển được gọi.
Tính năng | Filter | Interceptor |
---|---|---|
Được gọi trước hay sau bộ điều khiển | Trước | Sau |
Có thể được sử dụng để thực hiện các tác vụ mà không cần biết bộ điều khiển nào sẽ được gọi | Có | Không |
Có thể được sử dụng để thực hiện các tác vụ liên quan đến bộ điều khiển được gọi | Không | Có |
Được triển khai bởi lớp | javax.servlet.Filter | Giao diện org.springframework.web.servlet.HandlerInterceptor |
Tóm lại, việc lựa chọn sử dụng filter hay interceptor phụ thuộc vào nhu cầu cụ thể của ứng dụng. Nếu bạn cần thực hiện các tác vụ mà không cần biết bộ điều khiển nào sẽ được gọi, thì bạn nên sử dụng filter. Nếu bạn cần thực hiện các tác vụ liên quan đến bộ điều khiển được gọi, thì bạn nên sử dụng interceptor.