1. 官网流程图

2. 代码时序图示
- 请求首先进入 DispatcherHandler的handler方法
- DispatcherHandler的handler方法中循环遍历所有的 HandlerMapping 并找到合适的 Handler(可能有多个,这里是FilteringWebHandler)
- 然后遍历所有的适配器 handlerAdapters,找到能够支持执行上面找到的Handler的适配器
- 通过找到的适配器 Adapter 去执行 Handler
- handler中会根据Exchange中路由获取自定义Filter集合(gatewayFilters),同时与全局globalFilters组装为新的全量Filter集合
- 之后根据全量Filter集合构造FilterChain,并依次链式执行Filter的filter方法

3. 关键代码分析
3.1 DispatcherHandler#handler
@Override
public Mono<Void> handle(ServerWebExchange exchange) {
if (this.handlerMappings == null) {
return createNotFoundError();
}
if (CorsUtils.isPreFlightRequest(exchange.getRequest())) {
return handlePreFlight(exchange);
}
// 遍历handlerMappings并依次调用getHandler方法,获取适配的handler
return Flux.fromIterable(this.handlerMappings)
// 这里会执行到AbstractHandlerMapping#getHandler,最终返回的是FilteringWebHandler
.concatMap(mapping -> mapping.getHandler(exchange))
.next()
.switchIfEmpty(createNotFoundError())
// 此方法会遍历所有的适配器 handlerAdapters,找到能够支持执行上面找到的Handler的适配器
.flatMap(handler -> invokeHandler(exchange, handler))
.flatMap(result -> handleResult(exch