Могу ли я использовать @Autowired в пользовательском фильтре - PullRequest
0 голосов
/ 12 ноября 2018

Я использую @Autowire в пользовательском классе фильтра.Я получаю исключение нулевого указателя.

Работает ли @Autowire в фильтре?

вот код:

public class MyFilter extends CustomFilter {

@Autowire
public MyClass myClass;

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

Так я зарегистрировал свой компонент в классе конфигурации

@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 голосов
/ 13 ноября 2018

Добавить @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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...