下面是关于“Spring Cloud Gateway 设置 Context Path”的完整攻略。
什么是 Context Path
Context Path,即上下文路径,是指Web应用程序根目录下对应URL路径的名称,也可以称之为应用程序的基路径。
例如,我们有一个微服务应用程序“user-service”,我们将其设置了 Context Path 为“/user”,那么用户就可以通过访问“http://localhost:8080/user”来访问该服务。
Spring Cloud Gateway 的 Context Path 配置
为了实现 Spring Cloud Gateway 的 Context Path 配置,我们可以通过两种方式实现。
全局配置
我们可以在 application.yml 文件中配置全局的 context-path,这样所有的路由规则都会自动添加上该 context-path。具体的配置如下:
server:
servlet:
# 应用上下文根路径
context-path: /api
spring:
cloud:
gateway:
# Gateway路由配置
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/user/**
# 去除/user的前缀,否则访问/user会失败
filters:
- StripPrefix=1
在上面的配置中,我们将 server.servlet.context-path
设置为 /api
,Path=/user/**
表示只有访问 /api/user/**
才会匹配到路由规则。
单个路由规则配置
除了全局配置,我们还可以为每个路由规则单独设置 context-path。对于每个路由规则的 context-path 配置,可以通过配置路由规则中的 Predicate 和 Filter 实现。在 Predicate 中我们可以配置 Path=/user/**
,在 Filter 中使用 RewritePath=/user/(?<segment>.*)
, 将 http://localhost:8080/api/user/**
重写为 http://localhost:8080/user/**
。
具体配置如下所示:
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/api/user/**
filters:
- RewritePath=/api/(?<segment>.*), /$\{segment}
在上面的配置中, Path=/api/user/**
表示只有访问 /api/user/**
才会匹配到该路由规则,RewritePath=/api/$\{segment},/$\{segment}
中的 /api
表示要重写的模式,'${segment}' 表示重写后的对应部分段。
实例演示
下面给出两个实例说明:
全局配置
假设我们有一个应用服务名为“user-service”,我们将它配置在了 application.yml
文件中。现在我们需要给它设置 Context Path 为“/api/user”。
- 在
application.yml
文件中设置全局 context-path:
server:
servlet:
context-path: /api
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/user/**
filters:
- StripPrefix=1
在上面的配置中,我们将 server.servlet.context-path
设置为 /api
,所以整个服务的 URL 前缀均为 /api
,Path=/user/**
表示只有访问 /api/user/**
才会匹配到路由规则。StripPrefix=1
表示从模式匹配的路径中去除了前缀的长度为1,即将“/api/user”去除掉。
假设我们访问的 URL 是:“http://localhost:8080/api/user/detail”。那么将会访问服务:“http://localhost:8081/detail”。
单个路由配置
我们同样假设有一个应用服务名为“user-service”。现在我们需要针对它的某一个路由配置 Context Path。
spring:
cloud:
gateway:
routes:
- id: user-service
uri: http://localhost:8081
predicates:
- Path=/api/user/**
filters:
- RewritePath=/api/(?<segment>.*), /$\{segment}
在上面的配置中,Path=/api/user/**
表示只有访问 /api/user/**
才会匹配到该路由规则,RewritePath=/api/(?<segment>.*), /$\{segment}
中的 /api
表示要重写的模式,'${segment}' 表示重写后的对应部分段。
假设我们访问的 URL 是:“http://localhost:8080/api/user/detail”。那么将会访问服务:“http://localhost:8081/detail”。
这样做的好处是,我们可以将上下文路径拆分到路由规则中,这样可以更加灵活地控制服务的调用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:springcloud gateway设置context-path的操作 - Python技术站