长安网站建设制作价格,做网站用虚拟主机还是服务器,精品源码分享的网站,国内免费建站网站目录 Predicate#xff08;断言#xff09;内置Predicate请求参数匹配请求路径匹配Header 属性匹配Cookie 匹配请求方式匹配请求 ip 地址匹配时间匹配组合匹配 Predicate#xff08;断言#xff09;
在 Spring Cloud Gateway 中#xff0c;Predicate#xff08;断言断言内置Predicate请求参数匹配请求路径匹配Header 属性匹配Cookie 匹配请求方式匹配请求 ip 地址匹配时间匹配组合匹配 Predicate断言
在 Spring Cloud Gateway 中Predicate断言是用于匹配传入请求的条件。它们用于确定哪些请求应该被路由到特定的目标服务。
Predicate 接受一个输入参数返回一个布尔值结果。该接口包含多种默认方法来将 Predicate 组合成其他复杂的逻辑比如与或非。
Spring Cloud Gateway 提供了多种预定义的 Predicate可以根据不同的条件进行路由匹配。以下是一些常用的 Predicate
内置Predicate
请求参数匹配
Query Route Predicate 支持传入两个参数一个是属性名一个为属性值属性值可以是正则表达式。
示例
spring:cloud:gateway:routes:- id: my_routeuri: https://example.orgpredicates:- Querymyparameter这样配置只要请求中包含 myparameter属性的参数即可匹配路由。
我们还可以对参数值也进行配置
spring:cloud:gateway:routes:- id: my_routeuri: https://example.orgpredicates:- Querymyparameter,parametervalue这样配置 myparameter属性的值为parametervalue才会匹配
同时我们还可以使用正则表达式来表示 predicates:- Querymyparameter,my.这样只要当请求中包含 myparameter属性并且参数值是以 my 开头的长度为三位的字符串才会进行匹配和路由。
请求路径匹配
Path Route Predicate 接收一个匹配路径的参数来判断是否走路由。
spring:cloud:gateway:routes:- id: my_routeuri: https://example.orgpredicates:- Path/user/**这样设置则/user开头的任一路径都会匹配路由
在路径配置中我们可以使用{segment}来进行占位表示一个请求路径中的特定段 具体来说{segment}可以用于匹配请求路径中的任意段。例如如果有一个路由路径定义为/api/{segment}/users那么当请求路径为/api/profile/users时{segment}将会被替换为profile从而匹配该路由路径。
但是{segment}不支持匹配子路径如果想匹配子路径需要使用/**
Header 属性匹配
Header Route Predicate 接受两个参数一个 header 中属性名称和一个正则表达式这个属性值和正则表达式匹配则执行
spring:cloud:gateway:routes:- id: header_routeuri: https://example.orgpredicates:- HeaderX-Request-Id, \d这样配置则只有header请求头中有X-Request-Id属性并且属性值为数值的时候才匹配路由
Cookie 匹配
Cookie Route Predicate 可以接收两个参数一个是 Cookie name ,一个是正则表达式路由规则会通过获取对应的 Cookie name 值和正则表达式去匹配如果匹配上就会执行路由如果没有匹配上则不执行。
spring:cloud:gateway:routes:- id: cookie_routeuri: https://example.orgpredicates:- Cookiechocolate, ch.p这样配置请求必须包含一个名为chocolate的cookie其值需要与ch.p正则表达式匹配才会进行路由
请求方式匹配
可以通过是 POST、GET、PUT、DELETE 等不同的请求方式来进行路由支持一个或多个参数
spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- MethodGET,POST这样配置如果请求方法是GET或POST则此路由匹配
请求 ip 地址匹配
Predicate 也支持通过设置某个 ip 区间号段的请求才会路由RemoteAddr Route Predicate 接受 cidr 符号(IPv4 或 IPv6 )字符串的列表(最小大小为1)例如 192.168.0.1/16 (其中 192.168.0.1 是 IP 地址16 是子网掩码)。
在 CIDR 表示法中IP 地址后面跟着斜杠和一个数字斜杠后的数字表示子网掩码位数。
CIDR 符号的范围从 /0 到 /32对应着不同长度的子网掩码位数。较小的数字表示更大的范围例如 /0 表示整个 IP 地址空间而 /32 表示单个主机地址。
spring:cloud:gateway:routes:- id: remoteaddr_routeuri: https://example.orgpredicates:- RemoteAddr192.168.1.1/24192.168.1.1/24 表示一个 CIDR 格式的 IP 地址范围其中 /24 表示子网掩码。这个范围包括从 192.168.1.1 到 192.168.1.254 的所有 IP 地址。例如如果请求的远端地址为192.168.1.10则此路由匹配。
如果你只想匹配单个ip地址那么可以使用ip/32来表示ip/32表示只有该 IP 地址本身才会匹配其他任何 IP 地址都不会与之匹配。
时间匹配
我们可以指定某个时间前后的请求匹配路由
After 匹配在指定日期时间之后发生的请求
spring:cloud:gateway:routes:- id: after_routeuri: https://example.orgpredicates:- After2017-01-20T17:42:47.789-07:00[America/Denver]如果想匹配某个日期之前那么可以使用Before
spring:cloud:gateway:routes:- id: before_routeuri: https://example.orgpredicates:- Before2017-01-20T17:42:47.789-07:00[America/Denver]组合匹配
多个 Predicates 可以同时存在于同一个路由请求必须同时满足所有的条件才被这个路由匹配
示例
spring:cloud:gateway:routes:- id: method_routeuri: https://example.orgpredicates:- MethodPOST- HeaderX-Request-Id, \d这样配置只有当请求方法是POST方法而且请求头有X-Request-Id属性且值为数值才会匹配