项目中网关配置如下,Query标签作用是什么?
gateway:
routes:
- id: open_gateway
uri: 'http://localhost:9999'
predicates:
- Path= /anji-open/open-api/**
- Query= appId
- Query= method
- Query= sign
- Query= timestamp
filters:
- StripPrefix=2
- OpenParam
- OpenAppInfo
- OpenAddHeaders
通过请求参数匹配
Query Route Predicate 支持传入两个参数,一个是属性名一个为属性值,属性值可以是正则表达式。
-
spring:
-
cloud:
-
gateway:
-
routes:
-
- id: query_route
-
uri: http://ityouknow.com
-
predicates:
-
- Query=smile
这样配置,只要请求中包含 smile 属性的参数即可匹配路由。
使用 curl 测试,命令行输入:
curl localhost:8080?smile=x&id=2
经过测试发现只要请求汇总带有 smile 参数即会匹配路由,不带 smile 参数则不会匹配。
还可以将 Query 的值以键值对的方式进行配置,这样在请求过来时会对属性值和正则进行匹配,匹配上才会走路由。
-
spring:
-
cloud:
-
gateway:
-
routes:
-
- id: query_route
-
uri: http://ityouknow.com
-
predicates:
-
- Query=keep, pu.
这样只要当请求中包含 keep 属性并且参数值是以 pu 开头的长度为三位的字符串才会进行匹配和路由。
使用 curl 测试,命令行输入:
curl localhost:8080?keep=pub
测试可以返回页面代码,将 keep 的属性值改为 pubx 再次访问就会报 404,证明路由需要匹配正则表达式才会进行路由。
详细请参考:https://blog.csdn.net/xiaobolihuan/article/details/86736621