spring在filter中使用Autowired注入 bean为null

原因:

在Spring的自动注入中普通的POJO类都可以使用@Autowired进行自动注入,但是除了两类:Filter和Servlet无法使用自动注入属性。(因为这两个归tomcat容器管理)可以用init(集承自HttpServlet后重写init方法)方法中实例化对象。

注意:使用Tomcat war运行才会报这个错,SpringBoot jar运行不影响哦

解决方案

1. 去掉@Webfilter的那些注解, 这个filter应该是一个普通的类,没有注解例如:


public class RequestFilter implements Filter {

    @Autowired
    private AppTpUserService appTpUserService;

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
}

2. 新增一个config类,用来手工创建filter的bean,例如:

package com.bootdo.tp.filter;

import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;
import javax.servlet.Filter;

@Configuration
public class WebConfig {

    @Bean
    public Filter characterEncodingFilter() {
        CharacterEncodingFilter c = new CharacterEncodingFilter();
        c.setEncoding("UTF-8");
        return c;
    }

    @Bean
    public FilterRegistrationBean contextFilterRegistrationBean() {
        FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(RequestFilter());
        registrationBean.addUrlPatterns("/tp/page/*");
        registrationBean.setName("requestFilter");
        registrationBean.setOrder(1);
        return registrationBean;
    }

    @Bean
    public Filter RequestFilter() {
        return new RequestFilter();
    }

}

 这样就Ok了

联系方式:

QQ:2270084470

微信:m2270084470

猜你喜欢

转载自blog.csdn.net/weixin_43171866/article/details/82589683