基础模板
spring:
cloud:
gateway:
routes:
-id: gulimall-search
uri: lb://gulimall-search
predicates:
- Path=/api/search/**
predicates的概念
每一个route对应一个--->RouteDefinition
而route对应的predicates对应---->RouteDefinition的List predicates
如何生成对应的predicate?
由路由断言工厂实现(RoutePredicateFactory(接口)),总共有12个具体实现类

分别对应12种断言方式,至于用什么取决于 predicates:后的 每个element的内容例如- Path则是PathRoute....

类似Cookie的形式有所不同-->,前面是key,后面是value 要完全符合才可以使用
Cookie与Header在项目更新中灰度测试有用,可以给指定用户配上特定cookie或者header,来匹配上某个微服务中换上新代码的机器
分布式登录要注意的问题
- 登录功能在对应的微服务上,但是登录信息如token要统一在gateway解析
- 解析后,需要把用户信息记录到每个要发到其他微服务的request上(通常放header)
- 要预防openFeign发请求带没带原定要共享的数据
网关过滤器的执行流程
概念回想:
- dispatcherHandler-->根据predicatesmapping来转发给哪一个微服务
- 有一系列的过滤链--->(设计模式:责任链模式),每个过滤器有pre和post拦截,pre是在转发前,post是在转发后,和MVC一样,pre是按优先级正序,post是按优先级倒序
- 优先级最低的是负责转发的filter
- 在cloud里有一系列的内置的filter
- 如果要针对某个route在route ->> -id下弄一个filters(具体有哪些看官网)
- 如果是针对每一个route--->在gateway下,与routes同级,弄一个default-filters
- 要自定义filter/了解内置filter
- globalFilter:面向全部
- gateWayFilter:更加灵活,可以作用于任意指定的路由(yaml配置的route即是路由)
完整的概念过程:


- 关于StripPrefix:指定的=1就是删除path的几段前缀,然后这个path是/a/c/这样的(是url去掉协议和域名or地址的剩余部分)
- RewritePath,那里说明有误
自定义过滤器
gateWayFilter(必须在yaml中配置才会生效)
注意点
- 不是直接new,而是去弄一个factory(工厂模式(一个工厂只培养一个filter))
- 该工厂extends AbstractGatewayFilterFactory
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了