我在我的Spring MVC应用程序中看到了这个web.xml:
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
Run Code Online (Sandbox Code Playgroud)
我试图找出它为什么存在以及它是否真的需要它.
我在Spring文档中找到了这个解释,但它无助于我理解它:
它似乎表明这个组件是定义的servlet web.xml和Spring中定义的组件之间的"粘合剂" applicationContext.xml.
7.1 DelegatingFilterProxy
当使用servlet过滤器时,你显然需要在你的声明中声明它们
web.xml,否则它们将被servlet容器忽略.在Spring Security中,过滤器类也是在应用程序上下文中定义的Spring bean,因此能够利用Spring丰富的依赖注入工具和生命周期接口.SpringDelegatingFilterProxy提供web.xml了应用程序上下文之间的链接.使用DelegatingFilterProxy时,您将在
web.xml文件中看到类似的内容:Run Code Online (Sandbox Code Playgroud)<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是将Filter的方法委托给从Spring应用程序上下文获得的bean.这使bean能够受益于Spring Web应用程序上下文生命周期支持和配置灵活性.bean必须实现javax.servlet.Filter,并且必须与filter-name元素中的名称相同.有关更多信息,请阅读DelegatingFilterProxy的Javadoc
所以,如果我把它从我web.xml身上拿走,会发生什么?我的servlet无法与Spring容器通信?**