Từ HandlerIntercepter
's javadoc :
HandlerInterceptor
Về cơ bản tương tự như Servlet Filter
, nhưng ngược lại với Servlet , nó chỉ cho phép xử lý trước tùy chỉnh với tùy chọn cấm thực thi chính trình xử lý và xử lý hậu tùy chỉnh. Các bộ lọc mạnh mẽ hơn, chẳng hạn như chúng cho phép trao đổi các đối tượng yêu cầu và phản hồi được chuyển xuống chuỗi. Lưu ý rằng bộ lọc được định cấu hình web.xml
,
HandlerInterceptor
trong ngữ cảnh ứng dụng.
Như một hướng dẫn cơ bản, các nhiệm vụ tiền xử lý chi tiết liên quan đến trình xử lý chi tiết là ứng cử viên cho HandlerInterceptor
việc triển khai, đặc biệt là mã trình xử lý chung đã kiểm tra nhân tố và kiểm tra ủy quyền. Mặt khác, a Filter
rất phù hợp cho nội dung yêu cầu và xử lý nội dung xem, như biểu mẫu nhiều phần và nén GZIP. Điều này thường cho thấy khi nào người ta cần ánh xạ bộ lọc tới các loại nội dung nhất định (ví dụ: hình ảnh) hoặc cho tất cả các yêu cầu.
Với điều đó đang được nói:
Vậy sự khác biệt giữa Interceptor#postHandle()
và
Filter#doFilter()
?
postHandle
sẽ được gọi sau khi gọi phương thức xử lý nhưng trước khi khung nhìn được hiển thị. Vì vậy, bạn có thể thêm nhiều đối tượng mô hình hơn vào dạng xem nhưng bạn không thể thay đổi HttpServletResponse
vì nó đã được cam kết.
doFilter
linh hoạt hơn nhiều so với postHandle
. Bạn có thể thay đổi yêu cầu hoặc phản hồi và chuyển nó vào chuỗi hoặc thậm chí chặn xử lý yêu cầu.
Ngoài ra, trong preHandle
và postHandle
các phương thức, bạn có quyền truy cập vào phương thức đã HandlerMethod
xử lý yêu cầu. Vì vậy, bạn có thể thêm logic trước / sau xử lý dựa trên chính trình xử lý. Ví dụ: bạn có thể thêm một lôgic cho các phương thức xử lý có một số chú thích.
Thực tiễn tốt nhất mà nó nên được sử dụng là gì?
Như tài liệu đã nói, các tác vụ tiền xử lý chi tiết liên quan đến trình xử lý là những ứng cử viên cho HandlerInterceptor
việc triển khai, đặc biệt là mã trình xử lý chung có yếu tố và kiểm tra ủy quyền. Mặt khác, a Filter
rất phù hợp cho nội dung yêu cầu và xử lý nội dung xem, như biểu mẫu nhiều phần và nén GZIP. Điều này thường cho thấy khi nào người ta cần ánh xạ bộ lọc tới các loại nội dung nhất định (ví dụ: hình ảnh) hoặc cho tất cả các yêu cầu.