【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);
}
}