Spring Cloud Gateway 路由断言匹配规则详解

前言:

Gateway 的路由断言工厂(Route Predicate Factories)是用于路由规则匹配的组件,通过这些断言工厂,Gateway 能够根据请求的属性,例如:路径、方法、头部信息等,来完成不同的请求转发,本篇分享几种常见的断言工厂及配置方法。

Path 路由工厂

根据请求路径进行匹配

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**

Method 路由工厂

根据请求方法类型来匹配路由,不符合的类型不予通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
spring.cloud.gateway.routes[0].predicates[1] = Method=POST

Header 路由工厂

根据请求 Header 中的值匹配路由,请求 Header 中不包含指定的的值不予通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#header 中必须有 name 为 test-header 的请求才可以通过 
spring.cloud.gateway.routes[0].predicates[1] = Header=test-header

Host 路由工厂

根据请求 Host 中的值匹配路由,请求中不包含指定的的值不予通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#匹配 .study.com 结尾的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = Host=**.study.com

Query 路由工厂

根据查询参数匹配路由,只有带有 orderId 参数的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#请求中有 orderId 才可以通过
spring.cloud.gateway.routes[0].predicates[1] = Query=orderId

Before 路由工厂

Before 路由工厂也是时间路由工厂,只有在某个时间之前的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#在2024-08-19T11:11:11.000Z之前的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = Before=2024-08-19T11:11:11.000Z

After 路由工厂

After 路由工厂也是时间路由工厂,只有在某个时间之后的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#在2024-08-19T11:11:11.000Z之后的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = After=2024-08-19T11:11:11.000Z

Between 路由工厂

Between 路由工厂也是时间路由工厂,只有在某两个时间之间的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#在2024-08-19T11:11:11.000Z,2024-11-19T11:11:11.000Z 之间的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = After=2024-08-19T11:11:11.000Z,2024-11-19T11:11:11.000Z

Cookie 路由工厂

根据请求中的 Cookie 进行匹配,只有满足指定的 Cookie 才能够通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#匹配 .study.com 结尾的请求才可以通过
spring.cloud.gateway.routes[0].predicates[1] = Cookie=SESSIONSESSION, \d+

RemoteAddr 路由工厂

根据请求的远程地址进行匹配,只有匹配指定的地址的请求才可以通过。

#路由唯一标志
spring.cloud.gateway.routes[0].id = user-service
#路由指向目标 URL 服务名 客户端请求最终被转发到的微服务 推荐使用服务名称
spring.cloud.gateway.routes[0].uri = lb://user-service
#断言 以 /api/user 开头的请求都转发到 user-service 服务
spring.cloud.gateway.routes[0].predicates[0] = Path=/api/user/**
#匹配指定的远程地址的请求才能通过
spring.cloud.gateway.routes[0].predicates[1] = RemoteAddr=192.168.xxx.XXX

总结: Spring Cloud Gateway 给我们提供了丰富的路由断言规则,通过这些断言规则,Spring Cloud Gateway 可以灵活的根据各种条件匹配请求,并实复杂的路由逻辑。

如有不正确的地方请各位指出纠正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值