Spring Cloud Gateway配置详解-断言

131 阅读2分钟

本节将详细介绍内置断言相关内容。

配置模式

  1. 简化配置模式

    简化配置是将路由的断言配置进行了简化,路由以id进行分组,每组配置中的匹配规则以列表方式配置,每条规则以“=”分隔,左侧是路由断言名称,右侧是此断言的参数,如下官方示例(通过Cookie值匹配转发路由):

    spring:
      cloud:
        gateway:
          routes:
          - id: after_route #路由分组ID
            uri: https://example.org  #转发服务URI
            predicates:
            - Cookie=mycookie,mycookievalue #断言配置,此处“=”左侧 Cookie 指定使用 Cookie Route Predicate Factory,右侧 mycookie,mycookievalue 指定 Cookie 名称及值
    
  2. 完全配置模式

    完全配置模式则是相对于简化配置模式而言,断言相关配置更加完整,如下官方示例:

    spring:
      cloud:
        gateway:
          routes:
          - id: after_route
            uri: https://example.org
            predicates:
            - name: Cookie  #指定使用 Cookie Route Predicate Factory
              args:
                name: mycookie  #指定 Cookie 名称为 mycookie
                regexp: mycookievalue  #指定 mycookie 的值为 mycookievalue
    

路由匹配规则

Spring Cloud Gateway 自带了11种路由匹配规则(3.1.0版本),分别如下:

序号规则作用断言名称参数名参数值示例(predicates配置)
1The After Route Predicate Factory在指定时间之后的请求生效Afterdatetime包含时区的时间戳After=2022-01-20T17:42:47.789-07:00[Asia/Shanghai]
2The Before Route Predicate Factory在指定时间之前的请求生效Beforedatetime包含时区的时间戳After=2022-01-20T17:42:47.789-07:00[Asia/Shanghai]
3The Between Route Predicate Factory在指定时间范围内的请求生效Betweendatetime包含时区的时间戳Between=2022-01-20T17:42:47.789-07:00[Asia/Shanghai],2023-01-20T17:42:47.789-07:00[Asia/Shanghai]
4The Cookie Route Predicate Factory根据指定的Cookie及其值进行匹配Cookiename,regexpCookie名及相应值Cookie=chocolate, ch.p
5The Header Route Predicate Factory根据指定的请求头及其值进行匹配Headerheader,regexp请求头及相应值Header=X-Request-Id, \d+
6The Host Route Predicate Factory根据域名进行匹配Hostpatterns需要匹配的域名,多个用逗号分隔,支持Ant风格的模式匹配Host=**.somehost.org,**.anotherhost.org
7The Method Route Predicate Factory根据请求方式匹配Methodmethods需要匹配的请求方式,多个用逗号分隔Method=GET,POST
8The Path Route Predicate Factory根据请求路径匹配Pathpatterns, matchTrailingSlash需要匹配的路径,支持Spring风格的模式匹配;默认matchTrailingSlash为true(后缀路径模式匹配)Path=/red/{segment},/blue/{segment}
9The Query Route Predicate Factory根据请求参数匹配Queryparam,regexpQuery parameter名及其值(Java正则表达式,可不配置)Query=green #Query parameter中包含green则匹配
Query=red, gree. #Query parameter中包含red,其值匹配"gree."则匹配
10The RemoteAddr Route Predicate Factory根据请求方地址匹配RemoteAddrsources请求方IP列表RemoteAddr=192.168.1.1/24
11The Weight Route Predicate Factory根据权重进行路由Weightgroup,weight分组及权重Weight=group1, 8