filter和interceptor冲突,引起 spring 不会调用 addInterceptors
当配置了Filter,且把Filter配置为bean时,拦截器注册无效
如你配置了 并把filter注册为了bean
@WebFilter(filterName = "xxxFilter", urlPatterns = "/*")
此时在你的WebMvcConfigure里的addInterceptors将不会生效
// 以下代码无效,不管你是
// public class xxx implements WebMvcConfigurer
// 还是
// extends WebMvcConfigurationSupport
@Override
public void addInterceptors(InterceptorRegistry registry) {
log.info(" registry => {} ", registry);
log.info(" addInterceptors ");
registry.addInterceptor(new XXXInterceptor())
.addPathPatterns("/*").excludePathPatterns("/error");
}
解决办法:
- 注释掉
@WebFilter
,或者直接删掉filter
// @WebFilter(filterName = "xxxFilter", urlPatterns = "/*")
- 在configuration里用如下配置
// 这是spring的类。不用你去创建一个FilterRegistrationBean这样的类
@Bean
public FilterRegistrationBean<XxFilter> filterRegistrationBean() {
FilterRegistrationBean<XxFilter> registration = new FilterRegistrationBean<>();
registration.setFilter(new XxFilter());
registration.addUrlPatterns("/*"); // "/xxxx"
registration.setName("xxFilter");
registration.setOrder(1);
return registration;
}