Spring Cloud Gateway 路径重写正则表达式的理解 (RewritePath GatewayFilter Factory)

首先

官网对于 RewritePath GatewayFilter Factory 的解释是这样的:

spring:
  cloud:
    gateway:
      routes:
      - id: rewritepath_route
        uri: https://example.org
        predicates:
        - Path=/red/**
        filters:
        - RewritePath=/red(?<segment>/?.*), $\{segment}

对于请求路径 /red/blue,当前的配置在请求到到达前会被重写为 /blue,由于YAML的语法问题,$符号后面应该加上\

然后

在解释正则表达式前,我们需要学习一下java正则表达式分组的两个概念:

命名分组:(?<name>capturing text)
将匹配的子字符串捕获到一个组名称中,后面可通过分组名获得匹配结果。例如这里的示例,就是将 capturing text 捕获到名称为 name 的组中

引用捕获文本:${name}
将名称为name的命名分组对应的内容替换到此处

那么就很好解释官网的这个例子了,
对于配置文件中的: - RewritePath=/red(?<segment>/?.*), $\{segment}详解:

(?<segment>/?.*)

  • ?<segment>
    名称为 segment 的组
  • /?
    字符/出现0次或1次
  • .*
    任意字符出现0次或多次

合起来就是:将 /?.*匹配到的结果捕获到名称为segment的组中

$\{segment}

将名称为 segment 的分组捕获到的文本置换到此处。
注意,\的出现是由于避免 yaml 语法认为这是一个变量(因为在 yaml 中变量的表示法为 ${variable},而这里我们想表达的是字面含义),在 gateway 进行解析时,会被替换为 ${segment}

最后

业务举例:
将 https://spring.io/projects/** 这个路径重写为 https://spring.io/regexp/**

spring:
  cloud:
    gateway:
      routes:
      - id: rewritepath_route
        uri: https://spring.io
        predicates:
        - Path=/projects/**
        filters:
        - RewritePath=/projects(?<segment>/?.*), /regexp$\{segment}


黑暗驱散不了黑暗,只有光明才可以;
仇恨驱散不了仇恨,只有爱才可以。

—— Martin Luther King

  • 68
    点赞
  • 100
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值