当前位置: 首页 > 知识库问答 >
问题:

Spring云网关匹配多路径元素

沈树
2023-03-14

Spring Cloud Greenwich将Spring Cloud netflix zuul置于维护模式,因此我正在尝试从zuul迁移到Spring Cloud Gateway。

和Zuul一起我有一条路

zuul:
  routes:
    masterplan_match:
      path: /**/masterplans/**
      serviceId: api-masterplan

我所做的基本上是忽略接收路径中主计划之前或之后的所有内容,并重定向到api主计划。例如,/some/path/to/masterplan/masterplan都指向同一个api(原因是masterplan是一个较大实体的子资源,该实体负责创建新的masterplan,但是可以将masterplan视为完整的资源,用于获取详细信息、更新和删除等目的)。

我可以把这个配置映射到Spring云网关吗?从谓词来看,可行的似乎是路径谓词,但看起来所有匹配器都处理单个路径元素(除了通配符TheRespatheElement,但它只能用作最后一个元素-我认为),即:我需要编写以下内容:

spring
    cloud:
      gateway:
        routes:
        - id: masterplan_match
          uri: lb://api-masterplan # Coming from discovery client
          predicates:
          - Path=/some/path/to/masterplans/**, /masterplans/**

我错过了什么吗?这两条路能浓缩成一条吗?

共有1个答案

颜云瀚
2023-03-14

Spring Cloud Gateway自版本2.1.0以来支持多种模式

spring
    cloud:
      gateway:
        routes:
        - id: masterplan_match
          uri: lb://api-masterplan # Coming from discovery client
          predicates:
          - Path=/some/path/to/masterplans/**, /masterplans/**

另见:

在路径谓词#256中添加对多条路径的支持

主机路由谓词中的多个模式#589

 类似资料:
  • 在下面的spring cloud gateway配置中,我试图用匹配路径结束,但它不能匹配路径: spring cloud gateway打印以下日志:

  • 考虑这个使用Spring Boot 2.1.2和Spring Cloud Greenwich.release的基于微服务的应用程序: 每个微服务使用JSESSIONID cookie来标识自己的专用Servlet会话(即没有与Spring session和Redis共享的全局唯一会话)。 外部传入请求由Spring Cloud Gateway路由(以及通过Spring Cloud Netflix使

  • 这些配置允许你对许多与URL映射和路径匹配有关的设置进行定制。关于所有可用的配置选项,请参考PathMatchConfigurer类的API文档。 下面是采用MVC Java编程配置的一段代码: @Configuration @EnableWebMvc public class WebConfig extends WebMvcConfigurerAdapter {

  • 我已经用Eureka发现服务实现了Spring Cloud Gateway,一切都很好,但我看到了一些我在编写URL时不知道如何处理的事情,如果我没有在URL的末尾放一个/,Gateway会直接使用其实际URL(在Eureka注册)重定向到应用程序。 例如: https://example.com/bar重定向到应用程序URL(http://example.app.url.com:8010/bar

  • 摘要:ZUUL没有为输入路径选择正确的目标url,因为它没有严格匹配输入路径。 以下是我的zuul路线: 对于输入路径:"/v1/顾客/卡片/产品/",它应该选择-http://localhost:8800/v1/customer/card/product但它选择http://localhost:8400/v1/composite.我的期望是路径模式匹配按照指定的顺序发生,并且更严格,但似乎不是这

  • 使用spring-Cloud网关2.0.0. M5,我在配置文件(application.yml)中定义路由。我试图通过调用POST来更新这些路由 /application/gateway/refresh. 修改后的路由或新路由不会被刷新,即使我看到(带有断点)实际上执行了刷新例程。 当在配置文件中定义路由时,刷新应该工作吗?我错过了什么? 用例是在spring配置服务器中定义的路由。