springcloudgateway 重复执行filter
springcloudgateway 重复执行filter执行的核心方法:遍历所以的filter其中有一个自定义的filter排在NettyWriteResponseFilter 之后当index=13执行完所有的filter,返回Mono.empty()。然后执行CorsResponseHeaderFilter的 chain.filter(exchange).then()方法后,又调用了retu
·
springcloudgateway 重复执行filter
执行的核心方法:
遍历所以的filter
其中有一个自定义的filter排在NettyWriteResponseFilter 之后
当index=13执行完所有的filter,返回Mono.empty()。
然后执行CorsResponseHeaderFilter的 chain.filter(exchange).then()方法后,又调用了
return chain.filter(exchange); 把他下面的filter又执行了一次
@Component
public class CorsResponseHeaderFilter implements GlobalFilter, Ordered {
@Value("${linked.spring.cloud.gateway.corsResponseHeaderFilter.enabled:true}")
private boolean enabled;
@Value("${linked.spring.cloud.gateway.corsFilter.cookieEnabled:true}")
private boolean cookieEnabled;
@Override
public int getOrder() {
// 指定此过滤器位于NettyWriteResponseFilter之后
// 即待处理完响应体后接着处理响应头
return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1;
}
@Override
public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
List<String> filterHeaders= Arrays.asList(
HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN,
HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS,
HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS,
HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS
);
return chain.filter(exchange).then(Mono.defer(()->{
System.out.println("2222222222");
//重新执行这个filter后的所有filter
return chain.filter(exchange);
}));
}
}
从index=5,也就是它的后面的filter又执行一次。所以出现2次调用
更多推荐
已为社区贡献3条内容
所有评论(0)