Tôi thấy điều này trong ứng dụng Spring MVC của mình web.xml
:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
Tôi đang cố gắng tìm hiểu lý do tại sao nó ở đó và liệu nó có thực sự cần thiết hay không.
Tôi đã tìm thấy lời giải thích này trong tài liệu Spring nhưng nó không giúp tôi hiểu được nó:
Có vẻ như gợi ý rằng thành phần này là "keo" giữa các servlet được định nghĩa trong web.xml
và các thành phần được xác định trong Spring applicationContext.xml
.
7.1 Ủy quyềnFilterProxy
Khi sử dụng bộ lọc servlet, bạn rõ ràng cần phải khai báo chúng trong bộ lọc của bạn
web.xml
, nếu không chúng sẽ bị vùng chứa servlet bỏ qua. Trong Spring Security, các lớp bộ lọc cũng là Spring bean được định nghĩa trong ngữ cảnh ứng dụng và do đó có thể tận dụng các cơ sở phụ thuộc và giao diện vòng đời phong phú của Spring. Spring'sDelegatingFilterProxy
cung cấp liên kết giữaweb.xml
và bối cảnh ứng dụng.Khi sử dụng DelegateFilterProxy, bạn sẽ thấy một cái gì đó như thế này trong
web.xml
tệp:<filter> <filter-name>myFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> </filter> <filter-mapping> <filter-name>myFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Lưu ý rằng bộ lọc thực sự là một
DelegatingFilterProxy
, và không phải là lớp thực sự sẽ triển khai logic của bộ lọc. Cái gìDelegatingFilterProxy
là ủy quyền các phương thức của Bộ lọc cho một bean được lấy từ ngữ cảnh ứng dụng Spring. Điều này cho phép bean hưởng lợi từ hỗ trợ vòng đời ứng dụng web Spring và tính linh hoạt của cấu hình. Bean phải triển khaijavax.servlet.Filter
và nó phải có cùng tên với tên trong phần tử tên bộ lọc. Đọc Javadoc cho DelegateFilterProxy để biết thêm thông tin
Vì vậy, nếu tôi lấy nó ra khỏi của tôi web.xml
, điều gì sẽ xảy ra? Các Servlet của tôi sẽ không thể giao tiếp với vùng chứa Spring? **