文章来源

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. 搜狐视频 登录 md5 加密破解

    这是一个简单的md5加密,可以学习一下js加密的破解流程,当一个入门级的教程 第一步:请求抓包 password是32位的字母和数字组合,猜测可能是md5加密,我们md5在线工具上试一下 发现我们的猜 ...

  2. axios 下载文件

    axio请求里必须加  responseType: 'blob' 参数,如下 //下载文件 api.download=function(id) { return request({ url: this ...

  3. arXiv上传文章latex源码技巧

    <<2019.09.27>>更新 上传PS文件看来也是不行了,一大早收到邮件被arXiv标记为incomplete了.哎,还是老老实实提交Latex source files吧 ...

  4. 12-cmake语法-内部变量-系统信息

    系统信息 CMAKE_MAJOR_VERSION CMAKE 主版本号,比如 2.4.6 中的 2 CMAKE_MINOR_VERSION CMAKE 次版本号,比如 2.4.6 中的 4 CMAKE ...

  5. 【oracle】ORA-12638

    背景:换电脑时将旧电脑的ORACLE的登陆信息转到新电脑.其中有三个文件:listener.ora   sqlnet.ora  tnsnames.ora 解决办法:删了sqlnet.ora 原因:

  6. [Javascript] Creating an Iterator from an Array

    Every Array has a function which you can use to create an iterator. This function can only be access ...

  7. Linux-day02

    一.安装搜狗输入法 1.更新包安装 setting→language support 2.安装中文语言包,安装Fcitx输入法框架 3.安装搜狗输入法命令: sudo dpkg -i sogoupin ...

  8. ESA2GJK1DH1K基础篇: Android实现SmartConfig简单Demo

    下载源码去 百度安信可 导入源码 等待加载完 我的提示更新下软件 ,我就更新下 安装完成以后重新导入工程 安装到手机 注意,由于Android 9.0 以后的获取WIFI名称需要打开GPS,所以如果提 ...

  9. 图的遍历 | 1034 map处理输入数据,连通块判断

    这题写得比较痛苦.首先有点不在状态,其次题目比较难读懂. “Gang”成立的两个条件:①成员数大于两个  ②边权总和大于阈值K 首先,在录数据的时候通过map或者字符串哈希建立string到int的映 ...

  10. CF1120D Power Tree(构造题,差分,最小生成树)

    很有趣的一道题. 首先可以对每个叶子进行编号.按照DFS到的顺序即可.(假设从 $1$ 到 $k$) 然后对每个点求出它管辖的所有叶子的编号.因为是DFS序所以这一定是个区间.设点 $u$ 的这个区间 ...