我在Spring MVC应用程序的中看到了这一点web.xml
:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
我试图弄清楚为什么它存在以及是否真正需要它。
我在Spring文档中找到了这种解释,但并不能帮助我理解它:
似乎表明该组件是web.xml
Spring中定义的servlet 和Spring中定义的组件之间的“胶水” applicationContext.xml
。
7.1 DelegatingFilterProxy
使用servlet过滤器时,显然需要在中声明它们
web.xml
,否则servlet容器将忽略它们。在Spring Security中,过滤器类也是在应用程序上下文中定义的Spring Bean,因此能够利用Spring丰富的依赖项注入工具和生命周期接口。SpringDelegatingFilterProxy
提供了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>
请注意,过滤器实际上是一个
DelegatingFilterProxy
,而不是将实际实现过滤器逻辑的类。什么DelegatingFilterProxy
确实是通过向其从Spring应用程序上下文中的bean代理Filter的方法。这使bean可以从Spring Web应用程序上下文生命周期支持和配置灵活性中受益。Bean必须实现javax.servlet.Filter
,并且必须与filter-name元素中的名称相同。阅读Javadoc for DelegatingFilterProxy了解更多信息
因此,如果我从中删除此文件web.xml
,将会发生什么?我的servlet无法与Spring容器通信?**