【发布时间】:2011-10-07 04:51:41
【问题描述】:
我在 Spring MVC 应用程序的 web.xml 中看到了这一点:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
我正试图弄清楚它为什么存在以及它是否真的需要。
我找到了this explanation in the Spring docs,但这并不能帮助我理解它:
似乎表明这个组件是web.xml 中定义的servlet 和Spring applicationContext.xml 中定义的组件之间的“粘合剂”。
7.1 委托过滤器代理
使用 servlet 过滤器时,显然需要在
web.xml中声明它们,否则它们将被 servlet 容器忽略。在 Spring Security 中,过滤器类也是在应用程序上下文中定义的 Spring bean,因此能够利用 Spring 丰富的依赖注入设施和生命周期接口。 Spring 的DelegatingFilterProxy提供了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。这使 bean 能够从 Spring Web 应用程序上下文生命周期支持和配置灵活性中受益。该 bean 必须实现javax.servlet.Filter并且它必须与 filter-name 元素中的名称相同。阅读Javadoc for DelegatingFilterProxy了解更多信息
那么,如果我从web.xml 中删除它,会发生什么?我的 servlet 将无法与 Spring 容器通信?**
【问题讨论】:
标签: java spring spring-mvc spring-security