springcloud gateway设置context-path的操作

  • Post category:http

下面是关于“springcloudgateway设置context-path的操作”的完整攻略:

什么是Context Path

Context Path是Web应用中的一个概念,它可以理解为URL的前缀,常见的如/app/api等。我们可以通过Context Path把一个域名划分为不同的Web应用,避免Web应用之间的URL冲突。

如何设置Context Path

在Spring Cloud Gateway中,我们可以通过修改路由来设置Context Path。下面是具体的操作:

1. 在yml文件中指定server.servlet.context-path

首先,在项目的yml配置文件中,我们需要指定Spring Boot的上下文路径server.servlet.context-path,如下所示:

server:
  port: 8000
  servlet:
    context-path: /gateway-service

2. 配置路由

接下来,我们需要在application.ymlbootstrap.yml文件中,配置需要转发的路由,如下所示:

spring:
  cloud:
    gateway:
      routes:
        - id: order-service
          uri: http://localhost:8081
          predicates:
            - Path=/order/**
          filters:
            - RewritePath=/order/(?<segment>.*), /$\{segment}
        - id: product-service
          uri: http://localhost:8082
          predicates:
            - Path=/product/**
          filters:
            - RewritePath=/product/(?<segment>.*), /$\{segment}

在这里我们创建了两个路由,一个转发到order-service服务,一个转发到product-service服务,两个路由的前缀分别为/order/product

3. 测试

完成上述配置后,我们可以通过http://localhost:8000/gateway-service/orderhttp://localhost:8000/gateway-service/product来访问服务了。

示例

下面是两个实现Context Path的示例。

示例1

在这个例子中,我们把一个域名划分为两个Web应用,即http://localhost:8081为Web应用1,http://localhost:8082为Web应用2。我们将Web应用1的Context Path设置为/app1,Web应用2的Context Path设置为/app2

server:
  port: 8080
  servlet:
    context-path: /gateway

spring:
  cloud:
    gateway:
      routes:
        - id: app1
          uri: http://localhost:8081
          predicates:
            - Path=/app1/**
          filters:
            - RewritePath=/app1/(?<segment>.*), /$\{segment}

        - id: app2
          uri: http://localhost:8082
          predicates:
            - Path=/app2/**
          filters:
            - RewritePath=/app2/(?<segment>.*), /$\{segment}

在该配置中,我们设置的Gateway的Context Path为/gateway,则接口的访问路径为http://localhost:8080/gateway。Web应用1的Context Path为/app1,访问它的接口路径为:http://localhost:8080/gateway/app1,Web应用2的Context Path为/app2,访问它的接口路径为:http://localhost:8080/gateway/app2

示例2

这是一个更简单的例子,我们只需要把所有要访问的服务的Context Path设置为统一的前缀即可。

server:
  port: 8080
  servlet:
    context-path: /gateway

spring:
  cloud:
    gateway:
      routes:
        - id: app
          uri: http://localhost:8081
          predicates:
            - Path=/app/**
          filters:
            - RewritePath=/app/(?<segment>.*), /$\{segment}

在这个例子中,我们设置的Gateway的Context Path为/gateway,则接口的访问路径为http://localhost:8080/gateway。要访问的服务的Context Path都设置为/app,则访问Web应用1的接口路径为:http://localhost:8080/gateway/app