在 Spring Cloud Gateway 中,断言(Predicate)用于对请求进行判断(如根据请求方法、请求URI、请求头等等)。如果断言成功匹配,则当前路由才会生效,路由到具体服务。就如同我们代码中的 if 语句,仅 if 条件满足时,才会执行 if 语句中的代码块。例如:
if(条件) { // 代码块 }
上述 if 语句的 “条件” 可以认为是断言,“代码块” 可以认为是路由信息,当 “条件” 为 true 时,执行代码块,即执行路由信息。如下图:
上图中,客户端发送请求到网关,网管匹配断言,如果断言匹配,则执行对应的路由,路由将请求路由到具体的服务。例如,当客户端的请求和断言1匹配,将执行路由1,最终将请求路由到服务1。
为了我们使用 Spring Cloud Gateway 更为便捷,它提供了很多的内置断言,常用内置断言如下:
After 路由断言工厂将匹配在指定日期时间之后发生的请求。
Before 路由断言工厂将匹配在指定日期时间之前发生的请求。
Between 路由断言工厂将匹配发生在某个时间范围内的请求。
Cookie 路由断言工厂将匹配具有给定名称并且其值匹配正则表达式的 Cookies。
Header 路由断言工厂将与具有给定名称的请求头匹配,该请求头的值与正则表达式匹配。
Host 路由断言工厂将匹配与表达式匹配的 Host 头信息。
Method 路由断言工厂将匹配一个或多个 HTTP 请求方法。
Path 路由断言工厂将与请求的 URL 地址进行匹配。
Query 路由断言工厂将于请求的查询参数进行匹配。
RemoteAddr 路由断言工厂根据远程地址进行匹配。
Weight 路由断言工厂将根据分组和权重进行匹配。
XForwarded Remote Addr 路由断言工厂允许根据 HTTP 的 X-Forwarded-For 请求头过滤请求。
后续章节将对每个路由断言工厂进行详细介绍……