HandlerInterceptor trong Spring MVC là gì

Trong bài đăng này, tôi sẽ mô tả Spring MVC HandlerInterceptor, cách sử dụng và hành vi của nó.

Tổng quan

Trước khi đến với HandlerInterceptor , chúng ta hãy thảo luận một chút về HandlerMapping . Nó được sử dụng để ánh xạ một phương thức tới một URL cụ thể, do đó DispatcherServlet sẽ có thể gọi nó khi xử lý một yêu cầu. Ngoài ra, DispatcherServlet sử dụng HandlerAdapter để gọi phương thức.

Bây giờ chúng ta có một ý tưởng nhanh về bối cảnh và đây là lúc HandlerInterceptor bước vào vở kịch. Nó có ba giai đoạn như hành động trước khi xử lý, sau khi xử lý và sau khi hoàn thành (Rendering view object).

Trong các dự án, chúng tôi có thể sử dụng trình đánh chặn này để yêu cầu xác thực, yêu cầu xác thực, tránh mã lặp lại, v.v.

Vui lòng xem sơ đồ để hiểu rõ hơn về quy trình.

Đánh chặn hoạt động với Spring MVC

Sự phụ thuộc

Phụ thuộc vào mùa xuân
Sự phụ thuộc vào Springboot

Spring Handler Interceptor

Trước khi đi vào thực hiện chúng ta hãy xem qua nội dung. Nó là một giao diện và nó chứa 4 phương thức chính. Sử dụng các phương pháp này, chúng tôi có thể
thực hiện tất cả các loại xử lý trước và sau.

prehandle (): Được gọi trước khi trình xử lý thực được thực thi, nhưng chế độ xem vẫn chưa được tạo.
postHandle () : Được gọi sau khi trình xử lý được thực thi.
afterCompletion () : Được gọi sau khi yêu cầu hoàn chỉnh kết thúc và chế độ xem được tạo.
afterConcurrentHandlingStarted () : Nó bắt đầu thực thi không đồng bộ, để kiểm tra kiểu và / hoặc phiên bản. Điều này rất hiếm trong các tình huống thực tế.

Đây là cách triển khai preHandle () sẽ trông như thế nào:

Điều này chặn yêu cầu trước khi đến phương thức xử lý. Phương thức này trả về một boolean.

Nếu đúng, nó cho phép yêu cầu tiếp tục trong chuỗi thực thi đối với một bộ đánh chặn khác tới bộ xử lý cho chính bộ xử lý.

Nếu sai, spring giả sử bộ đánh chặn đã xử lý yêu cầu và bộ điều khiển của chúng tôi sẽ không bao giờ xử lý yêu cầu này. Làm gián đoạn bất kỳ quá trình thực thi nào trong tương lai trong chuỗi thực thi bao gồm cả trình xử lý thực tế.

Đây là cách triển khai postHandle () sẽ trông như thế nào:

Phương thức này được đặt ở giữa HandlerAdapter và trước khi DispatcherServlet hiển thị dạng xem cho phép bộ chặn đưa các thuộc tính bổ sung vào các đối tượng ModelAndView. Phương thức này sẽ được gọi trên mỗi bộ đánh chặn trong chuỗi theo thứ tự ngược lại, vì vậy bộ đánh chặn đầu tiên sẽ là bộ đánh chặn cuối cùng được gọi.

Đây là cách triển khai afterCompletion () sẽ trông như thế nào:

Điều này sẽ được gọi sau khi yêu cầu hoàn tất quá trình xử lý. Thông thường, phương pháp này có thể được sử dụng để thực hiện một số loại dọn dẹp tài nguyên.
Phương thức này sẽ được gọi trên mỗi bộ đánh chặn trong chuỗi theo thứ tự ngược lại, vì vậy bộ đánh chặn đầu tiên sẽ là bộ đánh chặn cuối cùng được gọi.

Thực hiện

Có hai cách để thực hiện.
1) Triển khai giao diện HandlerInterceptor .
2) Mở rộng lớp trừu tượng HandlerInterceptorAdapter .

Tôi sẽ sử dụng cách tiếp cận thứ hai. Nhưng đến cuối ngày, nó sẽ gọi HandlerInterceptor. Vui lòng xem sơ đồ.

Cấu hình

Có 2 cách khác nhau để cấu hình thiết bị đánh chặn.

Đối với dự án Springboot, chúng ta cần ghi đè phương thức addInterceptors () bên trong lớp SpringMVCConfig triển khai WebMvcConfigurer . Lớp SpringMVCConfig này là triển khai tùy chỉnh của chúng tôi.

Cấu hình lớp Spring

Đối với Spring, chúng ta có thể sử dụng cấu hình XML trong mvc-dispatcher-servlet.xml như được cung cấp bên dưới. Sử dụng điều này, chúng tôi có thể xác định yêu cầu bộ điều khiển nào sẽ đi qua bộ chặn bằng cách sử dụng thẻ <mvc: mapping> và <mvc :lude-mapping> .

Cấu hình XML
  1. Nếu bạn muốn định cấu hình lớp bộ điều khiển của mình mà không có bất kỳ hạn chế nào, bạn có thể sử dụng cấu hình No: 1 .
  2. Nếu bạn muốn định cấu hình một URI cụ thể với bộ đánh chặn, bạn có thể sử dụng cấu hình No: 2 .
  3. Nếu bạn muốn bao gồm hoặc loại trừ bất kỳ URIS cụ thể nào khỏi bộ đánh chặn, bạn có thể sử dụng cấu hình No: 3,4 .
  4. Không: 5 cho chúng ta thấy cách chúng ta có thể định cấu hình lớp Interceptor của mình trong tệp XML.

Xác thực cơ bản cho ứng dụng Springboot REST API với HandlerInterceptor

Xác thực JWT cho ứng dụng Springboot REST API với HandlerInterceptor

Hy vọng điều này sẽ hữu ích cho bạn và vui lòng để lại bình luận hoặc tin nhắn nếu bạn có bất kỳ mối quan tâm nào.

Suggested posts

Định cấu hình và sử dụng Apache Kafka với Spring Boot

Kafka với chiếc ủng lò xo

Định cấu hình và sử dụng Apache Kafka với Spring Boot

Giới thiệu Apache Kafka là một nền tảng phát trực tuyến phân tán mã nguồn mở, xử lý luồng dữ liệu thời gian thực quy mô lớn, thông lượng cao, có khả năng chịu lỗi. Hệ thống này dựa trên mô hình đăng ký xuất bản trong đó nhà sản xuất xuất bản tin nhắn cho các chủ đề và người tiêu dùng đăng ký các chủ đề đó để sử dụng tin nhắn.

Dấu hiệu mùa xuân của chúng tôi

Dấu hiệu mùa xuân của chúng tôi

Đối với chúng tôi, ở đây tại Nam Ontario, và đặc biệt là trong vùng vi khí hậu của chúng tôi, đó là sự thay đổi giữa sự xuất hiện của một số loài chim và sự xuất hiện của một trong hai loài thực vật nở hoa vào mùa xuân. Lungwort và Bloodroot.

Related posts

Tại sao một số dịch giả tự do đang giả mạo cuộc sống của họ

Tại sao một số dịch giả tự do đang giả mạo cuộc sống của họ

Gần đây, tôi đã truy cập Linkedin, mạng xã hội chuyên nghiệp lớn nhất thế giới và tìm thấy các bài đăng của các nhà thiết kế tự do mà tôi theo dõi, những người đã thu hút sự chú ý của tôi. Tất cả họ đều đăng ảnh chụp từ máy bay, trên bãi biển với máy tính xách tay của họ, từ bể bơi và văn phòng với những khung cảnh tuyệt vời.

Học tập trong tuần làm việc quan trọng hơn bạn nghĩ

Học tập trong tuần làm việc quan trọng hơn bạn nghĩ

Chúng ta thường thấy mình phải vật lộn để thực hiện những gì chúng ta biết là tốt cho chúng ta. Từ việc nói với một người quan trọng khác rằng chúng ta yêu họ đến việc nhớ nói chuyện như một tên cướp biển, sẽ luôn có những người cho rằng không cần thiết phải tổ chức các sự kiện trong ngày, tuần hoặc tháng vì họ đã làm những việc đó rồi.

Thử thách đọc Goodreads là độc hại

Thử thách đọc Goodreads là độc hại

Tay tôi ngứa ngáy lan rộng khi tôi mặc cả với người bán sách địa phương để mua một cuốn sách khác. Cuốn sách này giống như những cuốn còn lại mà tôi đã mua gần đây sẽ lên ngôi trong đống 'Cần đọc' (TBR) của tôi; tuy nhiên, tôi đã mua nó.

Mối đe dọa đó Lưu trữ: Tập 7 Black Basta

Mối đe dọa đó Lưu trữ: Tập 7 Black Basta

Trong thế giới kết nối ngày nay, mối đe dọa tấn công mạng phổ biến hơn bao giờ hết. Tội phạm mạng và các tác nhân quốc gia liên tục tìm cách khai thác các lỗ hổng và đánh cắp dữ liệu có giá trị, gây rủi ro đáng kể cho các tổ chức thuộc mọi quy mô.