《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 http://www.iocoder.cn/Spring-Cloud-Gateway/handler-filtering-web-handler/ 「芋道源码」欢迎转载,保留摘要,谢谢!

本文主要基于 Spring-Cloud-Gateway 2.0.X M4


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言将得到认真回复。甚至不知道如何读源码也可以请教噢
  4. 新的源码解析文章实时收到通知。每周更新一篇左右
  5. 认真的源码交流微信群。

阅读源码最好的方式,是使用 IDEA 进行调试 Spring Cloud Gateway 源码,不然会一脸懵逼。

胖友可以点击「芋道源码」扫码关注,回复 git019 关键字
获得艿艿添加了中文注释的 Spring Cloud Gateway 源码地址。

阅读源码很孤单,加入源码交流群,一起坚持!

1. 概述

本文主要分享 FilteringWebHandler

《Spring-Cloud-Gateway 源码解析 —— 处理器 (3.2) 之 RoutePredicateHandlerMapping 路由匹配 》「2.1 SimpleHandlerAdapter」 里,我们看到 SimpleHandlerAdapter#handle(ServerWebExchange, Object) 调用 FilteringWebHandler#handle(ServerWebExchange) 方法,处理请求。

FilteringWebHandler 通过创建请求对应的 Route 对应的 GatewayFilterChain 进行处理。


推荐 Spring Cloud 书籍

2. FilteringWebHandler

org.springframework.cloud.gateway.handler.FilteringWebHandler#handle(ServerWebExchange) 代码如下 :

 1: public class FilteringWebHandler implements WebHandler {
2:
3: /**
4: * 全局过滤器
5: */
6: private final List<GatewayFilter> globalFilters;
7:
8: @Override
9: public Mono<Void> handle(ServerWebExchange exchange) {
10: // 获得 Route
11: Route route = exchange.getRequiredAttribute(GATEWAY_ROUTE_ATTR);
12: // 获得 GatewayFilter
13: List<GatewayFilter> gatewayFilters = route.getFilters();
14: List<GatewayFilter> combined = new ArrayList<>(this.globalFilters);
15: combined.addAll(gatewayFilters);
16:
17: // 排序
18: //TODO: needed or cached?
19: AnnotationAwareOrderComparator.sort(combined);
20: logger.debug("Sorted gatewayFilterFactories: "+ combined);
21:
22: // 创建 DefaultGatewayFilterChain
23: return new DefaultGatewayFilterChain(combined).filter(exchange);
24: }
25: }

666. 彩蛋

知识星球

哈哈哈,我水更我快乐。主要还是考虑文章尽量解耦,所以这篇内容偏水( 很水 )。

胖友,分享一波朋友圈可好!

文章目录
  1. 1. 1. 概述
  2. 2. 2. FilteringWebHandler
  3. 3. 666. 彩蛋