Springboot 中 Filter 无法直接获取Bean与无法使用@Value解决方法

问题发现:在本地开发调试时正常,但发布到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;
    }

}

 

你可能感兴趣的:(springboot)