我可以在自定义过滤器中使用@Autowired

时间:2018-11-12 18:30:51

标签: java spring-boot

我在自定义过滤器类中使用@Autowire。我收到了空指针异常。

@Autowire是否可以在过滤器中使用?

代码如下:

public class MyFilter extends CustomFilter {

@Autowire
public MyClass myClass;

@Override
public String getInfo(){
return myClass.getMessage();
}
}

这是我在配置类中注册我的bean的方式

@Configuration
public class ConfigLoader{ 

@Bean
    public FilterRegistrationBean myFilterBean() {
      final FilterRegistrationBean filterBean = new FilterRegistrationBean();
      filterBean.setFilter(new MyFilter());
      filterBean.addUrlPatterns("/*");
      return filterBean;
    }
}

自定义过滤器:

public abstract class CustomFilter implements Filter {

    public FilterConfig getFilterConfig() {
        return this.filterConfig;
    }

    public void setFilterConfig(FilterConfig filterConfig) {
        this.filterConfig = filterConfig;
    }

    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        chain.doFilter(req, resp);
        this.clearContext();
    }

    protected abstract String getInfo();
}

1 个答案:

答案 0 :(得分:0)

添加@Component注释以过滤类。

@Component
public class MyFilter extends CustomFilter {

...

让Spring创建过滤器bean并在配置中自动装配它:

@Configuration
public class ConfigLoader{ 

@Autowired
private MyFilter myFilter;

@Bean
    public FilterRegistrationBean myFilterBean() {
      final FilterRegistrationBean filterBean = new FilterRegistrationBean();
      filterBean.setFilter(myFilter);
      filterBean.addUrlPatterns("/*");
      return filterBean;
    }
}