SpringCloud Gateway 修改请求路径的过滤器(StripPrefix Filter和PrefixPath Filter)
转载自:https://blog.csdn.net/weixin_40991408/article/details/104165703
一:StripPrefix Filter
1.1 StripPrefix Filter 是一个请求路径截取的功能,我们可以利用这个功能来做特殊业务的转发。
1.2 修改 application-predicate-path.yml 文件,代码如下:
server:
port: 8769
#--- #三个横线表示再创建一个配置文件
spring:
#profiles: predicate-path #配置文件名 和 spring.profiles.active 相对应
#配置程序名为eureka-gateway-client
application:
name: eureka-gateway-client
cloud:
#设置路由规则
gateway:
discovery:
locator:
#是否与服务注册于发现组件进行结合,通过 serviceId 转发到具体的服务实例。
#默认为 false,设为 true 便开启通过服务中心的自动根据 serviceId 创建路由的功能
enabled: true
##表示将请求路径的服务名配置改成小写 因为服务注册的时候,向注册中心注册时将服务名转成大写的了
lower-case-service-id: true
routes:
#我们自定义的路由 ID,保持唯一性
- id: predicate_path
#代表从注册中心获取服务,且以lb(load-balance)负载均衡方式转发
uri: lb://eureka-client
#uri: http://localhost:8762
#断言
predicates:
#表示将以/HiController开头的请求转发到uri为lb://eureka-client的地址上
#转发地址格式为 uri/HiController/**
- Path=/hello/world/HiController/**
filters:
#过滤器 设置所有的 方法都会自动添加foo=bar
#- AddRequestParameter=key, bar
#当请求路径匹配到/hello/world/HiController/**会将包含hello和后边的字符串接去掉转发,
#StripPrefix=2就代表截取路径的个数,这样配置后当请求/hello/world/HiController/aaa后端匹配到的请求路径,
#就会变成http://localhost:8762/HiController/aaa
- StripPrefix=2
logging:
level:
org.springframework.cloud.gateway: debug
eureka:
client:
#服务注册地址
serviceUrl:
#注意: Eureka Server 的注册地址
#将服务提供者注册到三个Eureka Server中去
#defaultZone: http://peer1:8001/eureka/,http://peer2:8002/eureka/,http://peer3:8003/eureka/
#defaultZone: http://peer1:8001/eureka/
defaultZone: http://localhost:8761/eureka/
增加了这部分的代码
当请求路径匹配到/hello/world/HiController/**
会将包含hello和后边的字符串接去掉转发,StripPrefix=2就代表截取路径的个数,这样配置后当请求/hello/world/HiController/aaa
后端匹配到的请求路径,就会变成http://localhost:8762/HiController/aaa
1.3 启动 eureka-serve, eureka-client (8762,8763 端口),eureka-gateway-client 服务,浏览器访问 http://localhost:8761/
访问 http://192.168.0.105:8769/hello/world/HiController/aaa,得到如下结果:
从结果中可以看出 filter 生效了。
二:PrefixPath Filter
2.1 PrefixPath Filter 的作用和 StripPrefix 正相反,是在 URL 路径前面添加一部分的前缀。
2.2 修改 application-predicate-path.yml 文件,代码如下:
server:
port: 8769
#--- #三个横线表示再创建一个配置文件
spring:
#profiles: predicate-path #配置文件名 和 spring.profiles.active 相对应
#配置程序名为eureka-gateway-client
application:
name: eureka-gateway-client
cloud:
#设置路由规则
gateway:
discovery:
locator:
#是否与服务注册于发现组件进行结合,通过 serviceId 转发到具体的服务实例。
#默认为 false,设为 true 便开启通过服务中心的自动根据 serviceId 创建路由的功能
enabled: true
##表示将请求路径的服务名配置改成小写 因为服务注册的时候,向注册中心注册时将服务名转成大写的了
lower-case-service-id: true
routes:
#我们自定义的路由 ID,保持唯一性
- id: predicate_path
#代表从注册中心获取服务,且以lb(load-balance)负载均衡方式转发
uri: lb://eureka-client
#uri: http://localhost:8762
#断言
predicates:
- Path=/**
filters:
# 当访问 http://localhost:8762/aaa,加上前缀就变成 http://localhost:8762/HiController/aaa
- PrefixPath=/HiController
logging:
level:
org.springframework.cloud.gateway: debug
eureka:
client:
#服务注册地址
serviceUrl:
#注意: Eureka Server 的注册地址
#将服务提供者注册到三个Eureka Server中去
#defaultZone: http://peer1:8001/eureka/,http://peer2:8002/eureka/,http://peer3:8003/eureka/
#defaultZone: http://peer1:8001/eureka/
defaultZone: http://localhost:8761/eureka/
增加了这部分的代码
当访问 http://localhost:8769/aaa,加上前缀就变成 http://localhost:8769/HiController/aaa
2.3 启动 eureka-serve, eureka-client (8762,8763 端口),eureka-gateway-client 服务,浏览器访问 http://localhost:8761/
访问 http://192.168.0.105:8769/aaa,得到如下结果:
从结果中可以看出 filter 生效了。