Tôi đang cố gắng xây dựng một trang web đơn giản bằng Clojure/Compojure và muốn cấp dữ liệu áp dụng bộ lọc servlet cho yêu cầu/phản hồi (ví dụ: một cá thể javax.servlet.Filter tiêu chuẩn) .Sử dụng javax.servlet.Filter với Compojure
ví dụ: nếu mã nguồn hiện nay là:
(defroutes my-app
(GET "/*"
(html [:h1 "Hello Foo!!"]))
)
Tôi muốn thêm một bộ lọc như thế này:
(defroutes my-app
(GET "/*"
(FILTER my-filter-name
(html [:h1 "Hello Foo!!"])))
)
đâu my-filter-name là một số ví dụ độc đoán của javax.servlet.Filter.
Bất kỳ ý tưởng nào về cách thực hiện điều này một cách hiệu quả và thanh lịch?
bạn có muốn áp dụng bộ lọc cho tất cả tuyến đường hoặc chỉ một số bộ lọc không? Trong trường hợp đầu tiên, có thể dễ dàng đặt bộ lọc phía trên Ring/Compojure, ở cấp Servlet. Trong trường hợp thứ hai, bạn cần phải viết (với reify hoặc proxy) một adapter mà biến một bộ lọc thành một middleware. – cgrand
Cảm ơn rất hữu ích. Tôi muốn làm điều thứ hai nhưng dường như không thể thực hiện được vì các tham số yêu cầu/đáp ứng mà bộ lọc cần không được chuyển thành các tham số cho hệ thống phần mềm trung gian. Tôi đang cố gắng đầu tiên - sẽ đăng câu trả lời nếu tôi làm cho nó hoạt động! – mikera
Để làm thứ hai, bạn cũng cần phải tạo ra các đối tượng thực hiện HttpServletRequest/Response trên đầu trang của các bản đồ yêu cầu/phản hồi. Hoặc sử dụng việc triển khai hiện tại (ví dụ: http://static.springsource.org/spring/docs/2.0.x/api/org/springframework/mock/web/MockHttpServletRequest.html) nhưng tôi nghĩ rằng việc triển khai chúng dễ dàng hơn đối phó với một đối tượng giả mạo trạng thái - như Rich Hickey nói "Những đồ vật giả, họ đang chế giễu bạn"! – cgrand