问题发现:在本地开发调试时正常,但发布到tomcat时,Filter无法通过@Value获取配置值。
问题造成原因:容器加载顺序导致, 加载顺序:Listener——Filter——Servlet,当项目启动时,filter初始化先于servlet, 而Spring中Bean初始化是在Servlet后,导致在Filter中无法注入。
解决方法:将filter添加到spring容器
1、去掉Filter类多余的注解,将注解改为:@Component
@Component
public class AuthFilter implements Filter {}
2、新增配置类 : WebConfig ;并将类注解为:@Configuration
@Configuration
public class WebConfig {
@Autowired
private AuthFilter authFilter;
@Bean
public FilterRegistrationBean authFilterRegistration() {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(authFilter);
registration.addUrlPatterns("/*");
registration.setName("authFilter");
registration.setOrder(1);
return registration;
}
}