我有两个过滤器来处理我的httpRequest并添加标头和数据。
我想按一定的执行顺序应用过滤器。所以我尝试了:
@Component
@Order(1)
public class FirstFilter implements Filter { //**** }
@Component
@Order(2)
public class SecondFilter implements Filter { //**** }
,并且效果很好。但是我只想将此订单应用于以(/ api)开头的请求,而不是所有请求..因此,@ Order注释无法满足我的要求。
我已经尝试过:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/**")
.addFilterAfter(new FirstFilter (), ChannelProcessingFilter.class)
.addFilterAfter(new SecondtFilter (), FirstFilter .class)
这也可以,但是我不想在ChannelProcessingFilter之后添加过滤器。这使请求被过滤器处理两次!而且不仅一次!
有什么想法吗?
答案 0 :(得分:0)
阅读this的问题详细信息,这正是您所要求的。读出
Spring Security不会在Filter bean上设置订单 创建。这意味着,当Boot创建一个 FilterRegistrationBean为其获取默认顺序为 LOWEST_PRECEDENCE。
如果您想在Spring Security之后使用自己的过滤器,则可以 为Spring Security的过滤器创建自己的注册并指定 订单。