如何在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
相关产品推荐
相关产品推荐

