文章来源

spring cloud gateway 通过谓词(Predicate)来匹配来自用户的请求

为了方便,使用postman测试不同的谓词的效果

路径谓词(Predicate)—— 最简单的谓词

  • 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定路径的路由
- id: path_route
uri: http://www.baidu.com
predicates:
- Path=/baidu/**
filters:
- StripPrefix=1
  • Path谓词配置的- Path=/baidu/**的作用是:匹配所有请求路径以http://localhost:8888/baidu开头的用户请求
  • 用postman请求http://localhost:8888/baidu,返回百度网页的HTML,效果如图
 

cookie谓词

  • 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定cookie的路由
- id: cookie_route
uri: http://www.taobao.com
predicates:
- Cookie=chocolate, value
  • Cookie谓词配置的- Cookie=chocolate, value的作用是:匹配请求中存在cookiechocolate=value的所有请求

    • 注意:- Cookie=chocolate, value中的value是正则表达式
  • 用postman随便请求一个urlhttp://localhost:8888/1111111,只要存在cookiechocolate=value,都网关都会匹配到对应路由,最后返回淘宝的HTML,效果如图

请求头谓词

  • 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定请求头的路由
- id: header_route
uri: http://www.jd.com/
predicates:
- Header=X-Request-Id, \d+
  • Header谓词配置的- Header=X-Request-Id, \d+的作用是:匹配请求头中存在符合条件“key为X-Request-Id,value为数字”的所有请求

    • 注意:Header=X-Request-Id, \d+,第二个参数是正则表达式,如\d+
  • 用postman随便请求一个urlhttp://localhost:8888/2222222,只要请求头中符合key为X-Request-Id,value为数字,都网关都会匹配到对应路由,最后返回京东的HTML,效果如图
 

请求参数谓词

  • 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定请求参数的路由
- id: cookie_route
uri: http://tmall.com/
predicates:
- Query=param1,value
  • 上面请求参数谓词- Query=param1,value的含义是: 匹配所有含有请求参数param1且它的值符合正则表达式value的请求

    • 注意:- Query=param1,value中的value是正则表达式
    • 注意:- Query=param1,value中的value可以省略
      • 即可变成- Query=param1,这是匹配所有请求参数含有param1的请求并且不筛选值
  • 效果如下

 

其他谓词

  • host谓词匹配对应的host,如下匹配www.somehost.orgbeta.somehost.org
spring:
cloud:
gateway:
routes:
- id: host_route
uri: http://example.org
predicates:
- Host=**.somehost.org

Method方法谓词匹配如getpost等请求的方法

spring:
cloud:
gateway:
routes:
- id: method_route
uri: http://example.org
predicates:
- Method=GET
  • RemoteAddr为ip地址谓词,匹配对应ip地址
spring:
cloud:
gateway:
routes:
- id: remoteaddr_route
uri: http://example.org
predicates:
- RemoteAddr=192.168.1.1/24
  • AfterBeforeBetween等时间谓词,分别匹配在某时之后,之前,和某段时间内的请求

谓词组合

  • 不同谓词之间可以组合使用。它们同时存在于同一个路由时,请求必须同时满足所有的谓词条件才被这个路由匹配。
  • 注意:一个请求满足多个路由的谓词条件时,请求只会被首个成功匹配的路由转发
  • 配置如下
spring:
cloud:
gateway:
routes:
# 匹配指定请求参数和请求头的路由
- id: compose_route
uri: http://www.oschina.net/
predicates:
- Query=param2
- Header=Header-Route,value
  •  效果如下
  

spring cloud gateway 深入了解 - Predicate的更多相关文章

  1. Spring Cloud Gateway Route Predicate Factory 的使用

    Spring Cloud Gateway的使用 一.需求 二.基本组成 1.简介 2.核型概念 1.Route 路由 2.Predicate 谓语.断言 3.Filter 过滤器 3.工作原理 三.网 ...

  2. Spring Cloud Gateway实战之四:内置predicate小结

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  3. 从0开始构建你的api网关--Spring Cloud Gateway网关实战及原理解析

    API 网关 API 网关出现的原因是微服务架构的出现,不同的微服务一般会有不同的网络地址,而外部客户端可能需要调用多个服务的接口才能完成一个业务需求,如果让客户端直接与各个微服务通信,会有以下的问题 ...

  4. api网关揭秘--spring cloud gateway源码解析

    要想了解spring cloud gateway的源码,要熟悉spring webflux,我的上篇文章介绍了spring webflux. 1.gateway 和zuul对比 I am the au ...

  5. Spring Cloud Gateway服务网关

    原文:https://www.cnblogs.com/ityouknow/p/10141740.html Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gatewa ...

  6. spring cloud gateway之filter篇

    转载请标明出处: https://www.fangzhipeng.com 本文出自方志朋的博客 在上一篇文章详细的介绍了Gateway的Predict,Predict决定了请求由哪一个路由处理,在路由 ...

  7. 网关服务Spring Cloud Gateway(一)

    Spring 官方最终还是按捺不住推出了自己的网关组件:Spring Cloud Gateway ,相比之前我们使用的 Zuul(1.x) 它有哪些优势呢?Zuul(1.x) 基于 Servlet,使 ...

  8. 微服务网关 Spring Cloud Gateway

    1.  为什么是Spring Cloud Gateway 一句话,Spring Cloud已经放弃Netflix Zuul了.现在Spring Cloud中引用的还是Zuul 1.x版本,而这个版本是 ...

  9. 跟我学SpringCloud | 第十二篇:Spring Cloud Gateway初探

    SpringCloud系列教程 | 第十二篇:Spring Cloud Gateway初探 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如 ...

随机推荐

  1. pycharm Launching unittests with arguments

    在运行程序时出现 但是代码没有错 源代码是: 这是运行时启动了测试 解决方法: File-> Settings -> Tools -> Python Integrated Tools ...

  2. 第07节-开源蓝牙协议BTStack框架代码阅读(上)

    首先来看一下,对于硬件操作,它是如何来进行处理的.在上篇文章中曾说过,在main函数里面它会调用硬件相关的代码,调用操作系统相关的代码.在BTStack中,可以搜索一下main.c,将会发现有很多ma ...

  3. Android Studio + uiautomator 配置运行

    1.在build.gradle中添加依赖: androidTestImplementation 'com.android.support.test.uiautomator:uiautomator-v1 ...

  4. django 导出xls文件

    1.同目录下创建file_handle.py文件 file_handle.py import xlwt, datetime from xlwt import * import xlsxwriter # ...

  5. 10-赵志勇机器学习-meanshift

    (草稿) meanshift 也是一种聚类方法. 优点在于:不需要提前指定类型数. 缺点就是计算量大 过程:(最一般的做法,没有使用核函数) 1. 逐点迭代,设置为位置中心 2. 计算所有点到位置中心 ...

  6. django -- 实现ORM登录

    前戏 上篇文章写了一个简单的登录页面,那我们可不可以实现一个简单的登录功能呢?如果登录成功,给返回一个页面,失败给出错误的提示呢? 在之前学HTML的时候,我们知道,网页在往服务器提交数据的时候,都是 ...

  7. 【border相关】【P3426】 [POI2005]SZA-Template

    [border相关][P3426] [POI2005]SZA-Template Description 给定一个字符串 \(S\),要求一个最短的字符串 \(T\),使得 \(S\) 可以由 \(T\ ...

  8. rsync 使用方法 ssh免密问题 不同端口同步

    不同端口同步(前提还是做好免密) 主要通过选项-e "ssh -p 端口"来实现 重命名了秘钥文件 指定-i即可~ 1. 本地目录同步到导地不同端口主机目录 [root@bakse ...

  9. [算法模板]SOS DP

    [算法模板]SOS DP 正文 SOS-DP(\(\text{Sum over Subsets}\))是用来解决这样的问题的: 其实就是子集和DP.上面每个\(F[mask]\)里面包含了\(mask ...

  10. Prometheus 介绍

    我们知道zabbix在监控界占有不可撼动的地位,功能强大.但是对容器监控显得力不从心.为解决监控容器的问题,引入了prometheus技术.prometheus号称是下一代监控.接下来的文章打算围绕p ...