ฉันเห็นสิ่งนี้ในแอป Spring MVC ของฉันweb.xml:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
ฉันพยายามหาสาเหตุว่าทำไมถึงอยู่ที่นั่นและจำเป็นจริงหรือไม่
ฉันพบคำอธิบายนี้ในเอกสาร Springแต่ไม่ได้ช่วยให้ฉันเข้าใจได้:
มันดูเหมือนว่าจะชี้ให้เห็นว่าส่วนนี้เป็น "กาว" ระหว่าง Servlets ที่กำหนดไว้ในและส่วนประกอบที่กำหนดไว้ในฤดูใบไม้ผลิweb.xmlapplicationContext.xml
7.1 DelegatingFilterProxy
เมื่อใช้ตัวกรอง servlet คุณต้องประกาศในตัวกรองของคุณอย่างชัดเจน
web.xmlมิฉะนั้นจะถูกละเว้นโดยคอนเทนเนอร์ servlet ใน Spring Security คลาสของตัวกรองยังเป็น Spring beans ที่กำหนดไว้ในบริบทของแอปพลิเคชันดังนั้นจึงสามารถใช้ประโยชน์จากสิ่งอำนวยความสะดวกในการฉีดแบบพึ่งพาและอินเทอร์เฟซวงจรชีวิตของ Spring Spring'sDelegatingFilterProxyให้การเชื่อมโยงระหว่างweb.xmlและบริบทของแอปพลิเคชันเมื่อใช้ DelegatingFilterProxy คุณจะเห็นสิ่งนี้ใน
web.xmlไฟล์:<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>สังเกตว่าจริงๆแล้วตัวกรองคือ a
DelegatingFilterProxyไม่ใช่คลาสที่จะใช้ตรรกะของตัวกรองจริงๆ สิ่งที่DelegatingFilterProxyจะเป็นวิธีการมอบหมายของตัวกรองผ่านถั่วที่ได้จากบริบทของแอพลิเคชันฤดูใบไม้ผลิ สิ่งนี้ทำให้ bean ได้รับประโยชน์จากการสนับสนุนวงจรชีวิตบริบทของเว็บแอ็พพลิเคชัน Spring และความยืดหยุ่นในการกำหนดค่า bean ต้องใช้งานjavax.servlet.Filterและต้องมีชื่อเดียวกันกับในองค์ประกอบ filter-name อ่านJavadoc สำหรับ DelegatingFilterProxyสำหรับข้อมูลเพิ่มเติม
ถ้าฉันเอาสิ่งนี้ออกไปweb.xmlจะเกิดอะไรขึ้น? servlets ของฉันไม่สามารถสื่อสารกับ Spring container ได้หรือไม่ **