详解Spring Cloud Gateway应用1之谓词
环境:springboot2.3.7 + spring cloud Hoxton.SR9
Spring Cloud Gateway工作流程:
客户端调用spring cloud gateway配置的请求。根据配置的映射确定请求与路由,将其发送到网关Web处理程序。此处理程序通过特定于请求的过滤器运行请求。过滤器被虚线分割的原因是,过滤器可以在代理请求发送之前和之后运行逻辑。执行所有“pre”过滤器逻辑。然后发出代理请求。在发出代理请求之后,运行“post”过滤器逻辑。
一. 路由谓词
1.After 路由谓词工厂
作用:After 谓词工厂接受一个参数datetime(它是java ZonedDateTime)。此谓词匹配在指定日期时间之后发生的请求。以下示例配置After Route谓词:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: after_route
- uri: https://www.baidu.com
- predicates:
- - After=2021-01-10T17:42:47.789-07:00
所有的请求必须在2021-01-10T17:42:47.789-07:00之后才能访问。当超过当前配置的这个时间,请求会返回404。
测试:
当前时间:2021-01-11 17:09
After=2021-01-10T17:42:47.789-07:00
正常调整到了页面:
设置:
After=2021-01-20T17:42:47.789-07:00
2.Before 路由谓词工厂
作用:Before 谓词工厂接受一个参数datetime(它是java ZonedDateTime)。此谓词匹配在指定日期时间之前发生的请求。以下示例配置Before Route谓词:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: before_route
- uri: https://www.qq.com
- predicates:
- - Before=2021-01-10T17:42:47.789-07:00
运行结果与After正好相反。
3.Between 路由谓词工厂
作用:Between谓词工厂接受两个参数datetime(它是java ZonedDateTime)。此谓词匹配请求必须在两个日期之间发生。以下示例配置Between Route谓词:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: between_route
- uri: https://www.163.com
- predicates:
- - Between=2021-01-01T17:42:47, 2021-01-10T17:42:47
请求必须位于2021-01-01T17:42:47到2021-01-10T17:42:47之间,如果超过这个日期范围返回
404。
失败:
配置:Between=2021-01-01T17:42:47, 2021-01-10T17:42:47
4.Cookie 路由谓词工厂
作用:只有网关请求中包含指定的cookie 才能匹配,否则404。以下示例配置Cookie Route谓词:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: cookie_route
- uri: https://www.baidu.com
- predicates:
- - Cookie=code,testiptv255
当请求header中包含的Cookie中包含name为code,值为testiptv255时,请求才能被匹配。
示例:
当不包含name为code的cookie时请求返回404。
5.Header 路由谓词工厂
作用:当请求中包含指定的Header信息时,请求才能匹配。以下示例配置Header Route谓词:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: header_route
- uri: https://www.baidu.com
- predicates:
- - Header=Host,localhost:20000
当网关请求Header中包含Host请求头,并且值为localhost:20000,请求才会被匹配。
示例:
6.Host 路由谓词工厂
作用:当请求Header中的Host头信息为配置中的列表中,那么网关将被匹配。以下示例配置Host Route谓词:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: host_route
- uri: https://www.baidu.com
- predicates:
- - Host=**.xg.com,localhost:20000
当请求Header中的Host取值为:www.xg.com或者xxx.xg.com或者localhost:20000时路由将被匹配:
示例:
7.Method 路由谓词工厂
作用:当请求是指定的Method时,路由将被匹配。以下示例配置Method Route谓词:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: method_route
- uri: https://www.baidu.com
- predicates:
- - Method=GET,POST
当请求是GET或者是POST请求时,网关路由将会被匹配。
示例:
8.Path 路由谓词工厂
作用:当请求的路径为指定的Path时,路由将会被匹配。以下示例配置Path Route谓词:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: path_route
- uri: https://www.baidu.com
- predicates:
- - Path=/api-a/{segment},/api-1/{segment}
当请求的地址为:http://xxx/api-a/xxx或者是http://xxx/api-1/xxx时,路由将会被匹配;注意:你的目标地址应该有/api-a/xxx和/api-1/xxx这两个请求地址。
示例:
页面显示的404是因为http://www.baidu.com/api-a/1没有这样的请求地址是baidu返回的404,并不是我们服务器返回的404错误。
9.Query 路由谓词工厂
作用:当请求中包含指定的查询参数或者是包含指定的查询参数及值时才匹配路由。以下示例配置Query Route谓词:
- 1、方式1:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: query_route
- uri: https://www.baidu.com
- predicates:
- - Query=name
- 2、方式2:
- spring:
- cloud:
- gateway:
- enabled: true
- discovery:
- locator:
- enabled: true
- lowerCaseServiceId: true
- routes:
- - id: query_route
- uri: https://www.baidu.com
- predicates:
- - Query=name,admin
方式1:当请求中只要包含name参数即可。
方式2:当请求中包含name参数名并且值为admin时匹配路由。
当值非admin时返回404。
相关文章
- 用户不增时长下滑,5G应用迟迟不来,2021年只能静待花开?
- “近”在眼前的5G,离你还有多远?工信部给出答案
- SaaS 安全:现代安全管理的新挑战
- 无处不在的“AI+”人工智能这样改变我们的生活
- 专家视点:没有监管的AI会产生伦理偏见
- 运营商推出百元内5G套餐:包含20G流量,是真降价还是套路?
- 运营商去年“砸”1757亿元,已建成全球最大规模的5G移动网络
- 5G 商用两年复盘:运营商去年“砸”1757 亿元,已建成全球最大规模的 5G 移动网络
- 从“应用可用”到“服务可达” 博睿数据的DNA创新法则
- 容器技术,带着云原生百米冲刺
- 使用率激增 250%,这份报告再次将 Serverless 推向幕前
- 2021年云应用中的网络安全
- 适度超前推动5G高质量发展
- Techo Hub技术巡回走进长沙,共同探讨数字媒体领域的云端技术创新与实践
- 5G发展正当其时 网络建设应适度超前
- 三大运营商5G手机终端用户达2.85亿户 占移动电话用户的17.8%
- 进击的云原生,为开发者提供更多可能性
- 混合云市场现状与发展趋势研究
- Research and Markets:2027年,全球5G系统集成市场规模将达455亿美元
- 企业网络安全中的AI应用,你知道吗?