我使用的是SpringBoot2.0.4.release,我有两个过滤器(
java.servlet.filter
)
RequestHeaderParseFilter
和
RequestLogFilter
.
请求头parsefilter
从请求头检索和设置值。和
请求日志筛选器
记录它们。我用
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;
}
我想点菜
请求日志筛选器
之后
请求头parsefilter
在过滤链中。但我不想用
RegistrationBean.setOrder(int)
. 在这种情况下,我有以下选择和问题:
-
我试着用
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
. 这意味着什么
请求头parsefilter
未在安全筛选器链中注册。
Q1。
我需要显式地向spring安全过滤器链注册我的过滤器吗?
即使这样,将这些过滤器添加到spring security过滤器链中也感觉不直观,因为它们与安全性无关。
-
不要将这些过滤器注册为spring security过滤器,而应将其注册为某些通用过滤器链的一部分。
Q2。
除了弹簧安全过滤链。春天还有其他过滤链吗?
Q3。
有什么我可以用的吗
AddFilterAfter后
订购我的过滤器而不使用弹簧安全过滤器链?