You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在web.xml中配置带依赖的Servlet Filter,求给定Spring Boot Filter配置的XML等价实现

非Spring Boot环境下对应配置的XML等价实现

你给出的Spring Boot注解配置一共做了三件事:实例化Access配置类、实例化AuthFilter、注册Filter到Servlet容器并设置拦截规则和优先级。非Spring Boot环境下没有自动注册Filter的机制,直接用以下两步配置即可:

第一步:Spring上下文XML(如applicationContext.xml)中配置Bean

<!-- 实例化外部Jar的Access配置类 -->
<bean id="access" class="com.ext.auth.Access">
    <constructor-arg>
        <array>
            <value>path=C:/Users/config.properties</value>
        </array>
    </constructor-arg>
</bean>

<!-- 实例化AuthFilter,注入构造参数 -->
<bean id="authFilter" class="com.ext.auth.filter.AuthFilter">
    <constructor-arg index="0" value="true"/>
    <constructor-arg index="1" ref="access"/>
</bean>

第二步:web.xml中注册Filter

<!-- 用Spring的DelegatingFilterProxy代理容器内的authFilter -->
<filter>
    <filter-name>authFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <param-name>targetFilterLifecycle</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>

<!-- 配置拦截规则,把该filter-mapping放在所有其他filter-mapping最前面,等价于原配置的order=0优先级 -->
<filter-mapping>
    <filter-name>authFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

注意事项

  • filter-name的取值必须和Spring上下文中authFilter的Bean id完全一致,否则会找不到对应的Filter实例
  • targetFilterLifecycle设置为true后,会按照Servlet规范执行Filter的初始化、销毁方法,和直接在web.xml中声明原生Filter的生命周期行为一致
  • 非Spring Boot的Servlet项目中,Filter的执行顺序由web.xml中filter-mapping的声明顺序决定,越靠前的配置优先级越高

内容的提问来源于stack exchange,提问作者Jack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 17:36:03