Saya melihat ini di aplikasi Spring MVC saya web.xml
:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
Saya mencoba mencari tahu mengapa itu ada dan apakah itu benar-benar dibutuhkan.
Saya menemukan penjelasan ini di dokumen Spring tetapi tidak membantu saya memahaminya:
Tampaknya menyarankan bahwa komponen ini adalah "perekat" antara servlet yang didefinisikan di web.xml
dan komponen yang ditentukan di Musim Semi applicationContext.xml
.
7.1 DelegatingFilterProxy
Saat menggunakan filter servlet, Anda jelas perlu mendeklarasikannya di Anda
web.xml
, atau mereka akan diabaikan oleh kontainer servlet. Dalam Keamanan Musim Semi, kelas filter juga merupakan kacang musim semi yang ditentukan dalam konteks aplikasi dan dengan demikian dapat memanfaatkan fasilitas injeksi ketergantungan Spring yang kaya dan antarmuka siklus hidup. SpringDelegatingFilterProxy
menyediakan hubungan antaraweb.xml
dan konteks aplikasi.Saat menggunakan DelegatingFilterProxy, Anda akan melihat sesuatu seperti ini di
web.xml
file:<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>
Perhatikan bahwa filter sebenarnya adalah a
DelegatingFilterProxy
, dan bukan kelas yang akan menerapkan logika filter. Apa yangDelegatingFilterProxy
dilakukan adalah mendelegasikan metode Filter melalui kacang yang diperoleh dari konteks aplikasi Spring. Hal ini memungkinkan kacang mendapatkan keuntungan dari dukungan siklus hidup konteks aplikasi web Spring dan fleksibilitas konfigurasi. Kacang harus diimplementasikanjavax.servlet.Filter
dan harus memiliki nama yang sama seperti yang ada di elemen nama filter. Baca Javadoc untuk DelegatingFilterProxy untuk informasi lebih lanjut
Jadi, jika saya mengeluarkan ini dari saya web.xml
, apa yang akan terjadi? Servletku tidak akan bisa berkomunikasi dengan wadah Spring? **