小编Tho*_*mas的帖子

Spring MVC的DelegatingFilterProxy有什么意义?

我在我的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丰富的依赖注入工具和生命周期接口.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>
Run Code Online (Sandbox Code Playgroud)

请注意,过滤器实际上是a DelegatingFilterProxy,而不是实际实现过滤器逻辑的类.什么DelegatingFilterProxy是将Filter的方法委托给从Spring应用程序上下文获得的bean.这使bean能够受益于Spring Web应用程序上下文生命周期支持和配置灵活性.bean必须实现javax.servlet.Filter,并且必须与filter-name元素中的名称相同.有关更多信息,请阅读DelegatingFilterProxyJavadoc

所以,如果我把它从我web.xml身上拿走,会发生什么?我的servlet无法与Spring容器通信?**

java spring spring-mvc spring-security

116
推荐指数
5
解决办法
7万
查看次数

标签 统计

java ×1

spring ×1

spring-mvc ×1

spring-security ×1