Developer
Developer

Reputation: 2529

Can I use @Autowired in custom filter

I'm using @Autowire in custom filter class. I'm getting null pointer exception.

Does @Autowire works in Filter?

here is the code:

public class MyFilter extends CustomFilter {

@Autowire
public MyClass myClass;

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

This is how I registered my bean in configuration class

@Configuration
public class ConfigLoader{ 

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

Custom filter:

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();
}

Upvotes: 5

Views: 8371

Answers (1)

Selindek
Selindek

Reputation: 3423

Add @Component annotation to filter class.

@Component
public class MyFilter extends CustomFilter {

...

Let Spring create the filter bean and autowire it in the configuration:

@Configuration
public class ConfigLoader{ 

@Autowired
private MyFilter myFilter;

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

Upvotes: 8

Related Questions