我正在使用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)
。在这种情况下,我有以下选择和问题:
我尝试使用Spring Security过滤器链中的addFilterAfter
,如下所示
@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过滤器链也感觉不直观,因为它们与安全性无关。
请勿将这些过滤器注册为Spring Security过滤器,而应注册为某些常规过滤器链的一部分。
Q2。 除Spring Security过滤器链之外。春季还有其他过滤链可用吗?
Q3。 我是否可以使用addFilterAfter
之类的东西来订购我的过滤器,而无需使用Spring Security过滤器链?