17-Gateway网关-过滤器链执行顺序
1.过滤器执行顺序
请求进入网关会碰到三类过滤器:当前路由的过滤器、DefaultFilter、GlobalFilter请求路由后,会将当前路由过滤器和DefaultFilter、GlobalFilter,合并到一个过滤器链(集合)中,排序后依次执行每个过滤器
疑问:
路由过滤器和DefaultFilter、GlobalFilter这三个类型都不一样,为什么能扔到一个集合里面??
解释:
其实我们的DefaultFilter和路由过滤器,这两个是非常接近的。因为局部的过滤器和全局的过滤器配置方式都是一模一样的,区别就是一个放在路由内,一个放在默认的过滤器里。所以他俩的本质从Java底层来看是一样的,只不过作用范围不一样,他俩的本质都是AddRequestHeaderGatewayFilterFactory,这个过滤器工程就会去读取配置文件,最后生成一个真正的过滤器,生成的真正过滤器就叫做GatewayFilter。所以我们认为路由过滤器和default过滤器是同一类的,都叫GatewayFilter。
源码:
public class AddRequestHeaderGatewayFilterFactory extends AbstractNameValueGatewayFilterFactory {
@Override
public GatewayFilter apply(NameValueConfig config) {
return new GatewayFilter() {
@Override
public Mono<Void> filter(ServerWebExchange exchange,
GatewayFilterChain chain) {
String value = ServerWebExchangeUtils.expa