ฉันเห็นสิ่งนี้ในแอป Spring MVC ของฉันweb.xml
:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
ฉันพยายามหาสาเหตุว่าทำไมถึงอยู่ที่นั่นและจำเป็นจริงหรือไม่
ฉันพบคำอธิบายนี้ในเอกสาร Springแต่ไม่ได้ช่วยให้ฉันเข้าใจได้:
มันดูเหมือนว่าจะชี้ให้เห็นว่าส่วนนี้เป็น "กาว" ระหว่าง Servlets ที่กำหนดไว้ในและส่วนประกอบที่กำหนดไว้ในฤดูใบไม้ผลิweb.xml
applicationContext.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 ได้หรือไม่ **