跳到主要内容

【6】GlobalFilter全局过滤器详解

文章目录

    • GlobalFilter概述
  • 默认全局过滤器
    • ForwardRoutingFilter
    • ReactiveLoadBalancerClientFilter
    • NettyRoutingFilter
    • NettyWriteResponseFilter
    • RouteToRequestUrlFilter
    • WebsocketRoutingFilter
    • GatewayMetricsFilter
    • WebClientHttpRoutingFilter
  • 参考文档

GlobalFilter概述

GlobalFilter是应用于所有路由的特殊过滤器。

GlobalFilter接口的实现类如下图所示:
 
每个类的说明如下:

 

当请求与路由匹配时,Web 处理程序会将所有的GlobalFilter和特定的GatewayFilter添加到过滤器链中。这个组合过滤器链是按org.springframework.core.Ordered接口排序的,也通过实现getOrder()方法来设置。

默认全局过滤器

ForwardRoutingFilter

RouteToRequestUrlFilter,转发路由网关过滤器。其根据 forward:// 前缀( Scheme )过滤处理,将请求转发到当前网关实例本地接口。

    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {


// 获得 请求Url
URI requestUrl = (URI)exchange.getRequiredAttribute(ServerWebExchangeUtils.GATEWAY_REQUEST_URL_ATTR);
// 获取协议
String scheme = requestUrl.getScheme();
if (!ServerWebExchangeUtils.isAlreadyRouted(exchange) && "forward".equals(scheme)) {


if (log.isTraceEnabled()) {


log.trace("Forwarding to URI: " + requestUrl);
}
// 如果是forward ,则DispatcherHandler 匹配并转发到当前网关实例本地接口
return this.getDispatcherHandler().handle(exchange);
} else {


return chain.filter(exchange);
}
}