原因:
在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了