我在我的 Spring MVC 应用程序的 web.xml
中看到了这一点:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
我想弄清楚为什么它会在那里,是否真的需要它。
我找到了 Spring 文档中的这个解释,但它并没有帮助我理解它:
这似乎表明这个组件是 web.xml
中定义的 servlet 和 Spring applicationContext.xml
中定义的组件之间的“粘合剂”。
7.1 DelegatingFilterProxy
在使用 servlet 过滤器时,显然需要在
web.xml
中声明它们,否则 servlet 容器将忽略它们。在 Spring Security 中,过滤器类也是在应用程序上下文中定义的 Spring bean,因此能够利用 Spring 丰富的依赖注入设施和生命周期接口。Spring 的DelegatingFilterProxy
提供了web.xml
和应用程序上下文之间的链接。在使用 RegiatingFilterProxy 时,您将在
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
所做的是将 Filter 的方法委托给从 Spring 应用程序上下文获取的 bean。这使得 bean 能够受益于 Springweb 应用程序上下文生命周期支持和配置灵活性。Bean 必须实现javax.servlet.Filter
,并且它的名称必须与 filter-name 元素中的名称相同。阅读 用于委托 FilterProxy 的 Javadoc以获得更多信息
那么,如果我把这个从 web.xml
中取出,会发生什么?我的 servlet 将无法与 Spring 容器通信?**