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 生效了。

posted @ 2023-02-28 14:02  哈喽哈喽111111  阅读(1215)  评论(0编辑  收藏  举报