gateway 获取访问者ip_spring-cloud-gateway之handler

本文详细解析了Spring Cloud Gateway的handler部分,特别是FilteringWebHandler和GlobalFilter的作用。介绍了如何通过GlobalFilter转换成OrderedGatewayFilter,并在handle方法中处理请求。此外,还探讨了RoutePredicateHandlerMapping的路由匹配逻辑,包括各种RoutePredicateFactory的用途,如PathRoutePredicateFactory、HeaderRoutePredicateFactory等,以及它们在精确匹配路由和过滤请求中的作用。
摘要由CSDN通过智能技术生成

引言

本篇文字主要讲解spring-cloud-gateway的handler部分,参考官方的gateway处理流程图可以知道handler是gateway的核心控制部分,其控制着request在gateway的整个生命周期。我们可以看到,一个请求由Client发出,被spring-web-server监听,经过gateway-handler-mapping之后请求便进入了gateway部分的代码实现部分,也就表明gateway是通过Gateway Web Hnadler来与web框架交接工作的。那么本节的重点则用于讲解handler的工作交接部分以及如何疏通整个工作流的,扮演这个交接工作角色的是FilteringWebHandler,实现web server的WebHandler接口。

6dc20ea39369170fc66082c5bdcee090.png

FilteringWebHandler | loadFilters(List filters)

关注final List globalFilters的初始化,会将Configuration注入的GlobalFilter bean初始化至globalFilters;这里有两个目标转换类,在loadFilters方法中map函数对每一个GlobalFilter做包装转换,对于实现了Ordered接口最终转换出OrderedGatewayFilter,没有排序的则转换出GatewayFilterAdapter;两个目标类均是GatewayFilter接口的实现类,GatewayFilterAdapter是FilteringWebHandler的私有嵌套类,理想情况不应该存在不实现Ordered接口的全局过滤器;而OrderedGatewayFilter位于filter包下,与GlobalFilter在同一包下声明,仅仅是对GatewayFilterAdapter的包装,将其GatewayFilterAdapter和order映射到字段。

5a9dcda80132d200f9ac7315f67ac614.png

FilteringWebHandler

这里的loadFilters加载的是全局过滤器,与RouteDefinitionRouteLocator中的loadFilters函数不同,RouteDefinitionRouteLocator中是加载的配置的gatewayFilter,即每次请求都需要根据Route和过滤器工厂集合来加载一次,而全局过滤器的加载只发生在进程启动时的一次性加载行为,但是最终加载结果类型一样都是OrderedGatewayFilter类型。

641eb47b0248faaed7c262caba85ce86.png

GatewayFilterAdapter

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值