springcloudalibaba架构(14):Gateway内置路由断言

发布于:2023-01-22 ⋅ 阅读:(359) ⋅ 点赞:(0)

前言

Predicate 断言,用于进行条件判断,只有断言都为真,才会真正的执行路由。

1. 内置断言工厂的介绍

SpringCloud Gateway包括许多内置的断言工厂,所有这些断言都与HTTTP请求的不同属性匹配。
具体如下:

  • 基于Datetime类型的断言工厂
    此类的断言根据时间来做判断,主要有三个
    AfterRoutePredicateFactory: 接收一个日期参数,判断请求日期是否晚于指定日期
    BeforeRoutePredicateFactory: 接收一个日期参数,判断请求日期是否早于指定日期
    BetweenRoutePredicateFactory: 接收两个日期参数,判断请求日期是否在指定时间段内
After=2021-12-12T23:59:59.123+08:00[Asia/Shanghai]
  • 基于远程地址的断言工厂
    RemoteAddrRoutePredicateFactory: 接收一个IP地址段,判断请求主机地址是否在地址段中
RemoteAddr=192.168.1.1/24
  • 基于Cookie的断言工厂
    CookieRoutePredicateFactory: 接收两个参数cookie名字和一个正则表达式。判断请求cookie是否具有给定名称且值与正则表达式匹配。
Cookie=chocolate,ch.
  • 基于Header的断言工厂
    HeaderRoutePredicateFactory: 接收两个参数,标题名称和正则表达式。判断请求Header是否具有给定名称且值与正则表达式匹配。
Header=X-Request-Id,\d+
  • 基于Host的断言工厂
    HostRoutePredicateFactory: 接收一个参数,主机名模式。判断请求的Host是否满足匹配条件。
Host=**.baidu.com
  • 基于Method请求方法的断言工厂
    MethodRoutePredicateFactory: 接收一个参数,判断请求类型是否跟指定的类型匹配。
Method=GET
  • 基于Path请求路径的断言工厂
    PathRoutePredicateFactory: 接收一个参数,判断请求的URI部分是否满足路径规则。
Path=/product-serv/{segment}
  • 基于Query请求参数的断言工厂
    QueryRoutePredicateFactory: 接收一个参数,请求param和正则表达式,判断请求参数是否具有给定名称值与正则表达式是否匹配。
Query=baz,ba.
  • 基于路由权重的断言工厂
    WeightRoutePredicateFactory: 接收一个[组名,权重],然后对于同一个组内的路由按照权重转发。
            routes: #路由数组,满足什么条件,转发到什么微服务
        - id: product_route  #当前路由发的标识,需要唯一,默认是UUID
#          uri: http://localhost:8081 #请求最终转发的地址
          uri: lb://server-product #lb 指的是负载均衡,后面跟的是具体微服务的名称
          order: 1 #路由优先级 数值越小优先级越高
          predicates: #断言
            - Path=/product-serv/** #当请求路径满足Path指定的规则时,此路由信息才会正常转发
            - Weight=group3,1
          filters: #过滤器,在请求传递过程中,对请求做一些手脚
            - StripPrefix=1 #在请求转发之前去掉一层路径,例如 localhost:7000/product-serv/product/1-->localhost:8081/product/1
        - id: product_route2  #当前路由发的标识,需要唯一,默认是UUID
          #          uri: http://localhost:8081 #请求最终转发的地址
          uri: lb://server-product #lb 指的是负载均衡,后面跟的是具体微服务的名称
          order: 1 #路由优先级 数值越小优先级越高
          predicates: #断言
            - Path=/product-serv/** #当请求路径满足Path指定的规则时,此路由信息才会正常转发
            - Weight=group3,9
          filters: #过滤器,在请求传递过程中,对请求做一些手脚
            - StripPrefix=1 #在请求转发之前去掉一层路径,例如 localhost:7000/product-serv/product/1-->localhost:8081/product/1

在这里插入图片描述

2. 内置断言工厂的使用(示例)

2.1 BeforeRoutePredicateFactory工厂

在这里插入图片描述
重启gateway网关,发起请求。
在这里插入图片描述

把时间修改后,重启gateway,再次请求,断言为真,可以访问到接口。
在这里插入图片描述
在这里插入图片描述

2.2 MethodRoutePredicateFactory工厂

在添加断言前,先测试POST是否可以请求,确认发起POST可以请求接口。
在这里插入图片描述
此时,设置Method=GET
在这里插入图片描述

发起POST请求,请求失败。而发起GET请求,则没问题。
在这里插入图片描述
在这里插入图片描述

本文含有隐藏内容,请 开通VIP 后查看