Относительный порядок фильтров безопасности, отличных от Spring (например, addFilterAfter, addFilterBefore)? - PullRequest
0 голосов
/ 01 февраля 2019

Я использую Spring Boot 2.0.4.RELEASE, и у меня есть два фильтра ( java.servlet.Filter ) RequestHeaderParseFilter и RequestLogFilter.RequestHeaderParseFilter извлекает и устанавливает значения из заголовка запроса.И RequestLogFilter регистрирует их.Я зарегистрировал их, используя FilterRegistrationBean

@Bean
public FilterRegistrationBean requestHeaderParseFilter () {
  FilterRegistrationBean registration = new FilterRegistrationBean();
  Filter requestHeaderParseFilter = new RequestHeaderParseFilter();
  this.beanFactory.autowireBean(requestHeaderParseFilter);
  registration.setFilter(requestHeaderParseFilter);
  registration.addUrlPatterns("/*");
  return registration;
}

@Bean
public FilterRegistrationBean requestLogFilter() {

  FilterRegistrationBean registration = new FilterRegistrationBean();
  Filter requestLogFilter = new RequestLogFilter();
  this.beanFactory.autowireBean(requestLogFilter);
  registration.setFilter(requestLogFilter);
  registration.addUrlPatterns("/rest/*");
  return registration;
}

Я хочу заказать RequestLogFilter после RequestHeaderParseFilter в цепочке фильтров.Но я не хочу использовать RegistrationBean.setOrder(int).В этой ситуации у меня есть следующие варианты и вопросы:

  1. Я пытался использовать addFilterAfter, доступный в цепочке фильтров Spring Security, как показано ниже

    @Inject
    @Qualifier("requestLogFilter")
    private FilterRegistrationBean<Filter> filterRegistrationBean;
    
    .addFilterAfter(this.filterRegistrationBean.getFilter(), RequestHeaderParseFilter.class);
    

    Во-первых, это выбрасываетошибка Error creating bean with name 'springSecurityFilterChain'. Cannot register after unregistered Filter class.Это означает, что RequestHeaderParseFilter не было зарегистрировано в цепочке фильтров безопасности.

    Q1. Нужно ли явно регистрировать мои фильтры в цепочке фильтров Spring Security?

    Даже если это работает, добавлять эти фильтры в цепочку фильтров Spring Security не очень удобно, так как им нечегоделать с безопасностью.

  2. Не регистрируйте эти фильтры как фильтры Spring Security, а скорее как часть некоторой общей цепочки фильтров.

    Q2. Помимо цепочки фильтров Spring Security.Есть ли в Spring другие цепочки фильтров?

    Q3. Могу ли я в любом случае использовать что-то вроде addFilterAfter для заказа своих фильтров без использования цепочки фильтров Spring Security?

...