9-SpringCloud-服务网关 Gateway-高级特性之 Filter-2

6.第三组之 AddResponseHeader GatewayFilter Factory

该服务网关过滤工厂用于新增响应头内容。AddResponseHeader 主要携带了三个参数,分别是 name、value 和 override(override的默认值未 true)。若 override 的值为 true 时,新增响应头内容匹配所有请求;若 override 的值为 false 时,且已经存在该响应头,则不会新增响应头匹配所有请求。具体的信息如下所示。

在这里插入图片描述

具体的操作如下所示。

  1. 修改服务网关 9527 的 application.yml 文件,在 filters 参数下添加 AddResponseHeader 参数,用于新增响应头内容。具体的配置文件信息如下所示。

            - id: pay_routh3 #pay_routh3
              uri: lb://cloud-payment-service                #匹配后提供服务的路由地址
              predicates:
                - Path=/pay/gateway/filter/**              # 断言,路径相匹配的进行路由
              filters:
                - AddRequestHeader=X-Request-atguigu1,atguiguValue1  # 请求头kv,若一头含有多参则重写一行设置
                - AddRequestHeader=X-Request-atguigu2,atguiguValue2
                - RemoveRequestHeader=sec-fetch-site      # 删除请求头sec-fetch-site
                - SetRequestHeader=sec-fetch-mode, Blue-updatebyzzyy # 将请求头sec-fetch-mode对应的值修改为Blue-updatebyzzyy
                - AddRequestParameter=customerId,9527001 # 新增请求参数Parameter:k ,v
                - RemoveRequestParameter=customerName   # 删除url请求参数customerName,你传递过来也是null
                - AddResponseHeader=X-Response-leolei, BlueResponse # 新增请求参数X-Response-atguigu并设值为BlueResponse
    
  2. 测试,本节暂时不测试,待新增参数 RemoveResponseHeader 和 SetResponseHeader 后一起测试。

7.第三组之 RemoveResponseHeader GatewayFilter Factory

该服务网关过滤工厂用于删除响应头内容。RemoveResponseHeader 携带了一个参数 name,通过响应头内容的 name 删除 响应头内容,具体的信息如下所示。

在这里插入图片描述

具体操作如下所示。

  1. 修改服务网关 9527 的 application.yml 文件,在 filters 参数下添加 RemoveResponseHeader 参数,用于删除响应头内容。具体的配置文件信息如下所示。

            - id: pay_routh3 #pay_routh3
              uri: lb://cloud-payment-service                #匹配后提供服务的路由地址
              predicates:
                - Path=/pay/gateway/filter/**              # 断言,路径相匹配的进行路由
              filters:
                - AddRequestHeader=X-Request-atguigu1,atguiguValue1  # 请求头kv,若一头含有多参则重写一行设置
                - AddRequestHeader=X-Request-atguigu2,atguiguValue2
                - RemoveRequestHeader=sec-fetch-site      # 删除请求头sec-fetch-site
                - SetRequestHeader=sec-fetch-mode, Blue-updatebyzzyy # 将请求头sec-fetch-mode对应的值修改为Blue-updatebyzzyy
                - AddRequestParameter=customerId,9527001 # 新增请求参数Parameter:k ,v
                - RemoveRequestParameter=customerName   # 删除url请求参数customerName,你传递过来也是null
                - AddResponseHeader=X-Response-leolei, BlueResponse # 新增请求参数X-Response-atguigu并设值为BlueResponse
                - RemoveResponseHeader=Content-Type # 将默认自带Content-Type回应属性删除
    
  2. 测试,本节暂时不测试,待新增参数 AddResponseHeader 和 SetResponseHeader 后一起测试。

8.第三组之 SetResponseHeader GatewayFilter Factory

该服务网关过滤工厂用于修改响应头内容。SetResponseHeader 携带了两个参数,分别是 name 和 value,该响应头参数通过给定的 name 修改已有响应头参数的值,具体的信息如下所示。

在这里插入图片描述

具体操作如下所示。

  1. 修改服务网关 9527 的 application.yml 文件,在 filters 参数下添加 RemoveResponseHeader 参数,用于删除响应头内容。具体的配置文件信息如下所示。

            - id: pay_routh3 #pay_routh3
              uri: lb://cloud-payment-service                #匹配后提供服务的路由地址
              predicates:
                - Path=/pay/gateway/filter/**              # 断言,路径相匹配的进行路由
              filters:
                - AddRequestHeader=X-Request-atguigu1,atguiguValue1  # 请求头kv,若一头含有多参则重写一行设置
                - AddRequestHeader=X-Request-atguigu2,atguiguValue2
                - RemoveRequestHeader=sec-fetch-site      # 删除请求头sec-fetch-site
                - SetRequestHeader=sec-fetch-mode, Blue-updatebyzzyy # 将请求头sec-fetch-mode对应的值修改为Blue-updatebyzzyy
                - AddRequestParameter=customerId,9527001 # 新增请求参数Parameter:k ,v
                - RemoveRequestParameter=customerName   # 删除url请求参数customerName,你传递过来也是null
                - AddResponseHeader=X-Response-leolei, BlueResponse # 新增请求参数X-Response-atguigu并设值为BlueResponse
                - RemoveResponseHeader=Content-Type # 将默认自带Content-Type回应属性删除
                - SetResponsseHeader=Date,2025-10-31 # 设置回应头Date值为2025-10-31
    
  2. 测试,本节将联合新增参数 AddResponseHeader 和 SetResponseHeader 一起测试。启动支付微服务 8001、负载均衡80、服务网关 9527 和服务链路追踪 Zipkin,若未关闭之前的服务,可以只重启服务网关 9527即可。然后在浏览器中测试网址http://localhost:9527/pay/gateway/filter注意,先启动服务链路追踪 Zipkin。

    未添加过滤工厂 AddResponseHeader、SetResponseHeader 和 RemoveResponseHeader 后访问网址http://localhost:9527/pay/gateway/filter,浏览器输出的请求参数如下图所示。

    在这里插入图片描述

    添加过滤工厂 AddResponseHeader、SetResponseHeader 和 RemoveResponseHeader 后访问网址http://localhost:9527/pay/gateway/filter,浏览器输出的请求参数如下图所示。

    在这里插入图片描述

9.第四组之 PrefixPath GatewayFilter Factory

该服务网关过滤工厂用于自动添加路径前缀。PrefixPath 携带了一个参数 prefix,主要用于指定访问网址的前缀,每次访问网址可不用添加前缀,服务网关会自动添加路径前缀,具体的信息如下所示。

在这里插入图片描述

具体操作如下所示。

  1. 修改服务网关 9527 的 application.yml 文件,在 filters 下添加参数 PrefixPath 指定访问网址的路径前缀,具体的配置文件信息如下所示。

            - id: pay_routh3 #pay_routh3
              uri: lb://cloud-payment-service                #匹配后提供服务的路由地址
              predicates:
    #            - Path=/pay/gateway/filter/**              # 断言,路径相匹配的进行路由
                - Path=/gateway/filter/**              # 断言,路径相匹配的进行路由
              filters:
                - AddRequestHeader=X-Request-atguigu1,atguiguValue1  # 请求头kv,若一头含有多参则重写一行设置
    #            - AddRequestHeader=X-Request-atguigu2,atguiguValue2
    #            - RemoveRequestHeader=sec-fetch-site
    #            - SetRequestHeader=sec-fetch-mode,Bulue-updatebyleolei
    #            - AddRequestParameter=customerId,6666
    #            - RemoveRequestParameter=customerName
    #            - AddResponseHeader=X-Response-leolei,BlueResponse
    #            - RemoveResponseHeader=Content-Type
    #            - SetResponseHeader=Date,2025-10-31
                - PrefixPath=/pay
    
  2. 测试,启动支付微服务 8001、负载均衡80、服务网关 9527 和服务链路追踪 Zipkin,若未关闭之前的服务,可以只重启服务网关 9527即可。然后在浏览器中测试网址http://localhost:9527/gateway/filter注意,先启动服务链路追踪 Zipkin。

    这里访问的网址是http://localhost:9527/gateway/filter,但实际访问的是http://localhost:9527/pay/gateway/filter。这里之所以没有 /pay,是因为该路径前缀被服务网关过滤器统一管理了。访问网址后,打开浏览器开发者模式查看具体访问的网址,如下图所示。

    在这里插入图片描述

10.第四组之 SetPath GatewayFilter Factory

该服务网关过滤工厂用于修改访问路径。SetPath 携带了一个路径参数 template,该过滤工厂的参数需要配合断言的 Path 参数进行设置,断言的 Path 中使用占位符 {segment}替换为 SetPath 的路径对网址进行访问。具体的信息如下所示。

在这里插入图片描述

具体操作如下所示。

  1. 修改服务网关 9527 的 application.yml 配置文件,在 filters 下添加参数 SetPath 修改访问路径,需要配合占位符和断言的 Path 参数进行修改。具体的配置文件信息如下所示。

            - id: pay_routh3 #pay_routh3
              uri: lb://cloud-payment-service                #匹配后提供服务的路由地址
              predicates:
    #            - Path=/pay/gateway/filter/**              # 断言,路径相匹配的进行路由
    #            - Path=/gateway/filter/**              # 断言,路径相匹配的进行路由
                - Path=/XYZ/abc/{segment} # 断言,为配合SetPath测试,{segment}的内容最后被SetPath取代
              filters:
                - AddRequestHeader=X-Request-atguigu1,atguiguValue1  # 请求头kv,若一头含有多参则重写一行设置
    #            - AddRequestHeader=X-Request-atguigu2,atguiguValue2
    #            - RemoveRequestHeader=sec-fetch-site
    #            - SetRequestHeader=sec-fetch-mode,Bulue-updatebyleolei
    #            - AddRequestParameter=customerId,6666
    #            - RemoveRequestParameter=customerName
    #            - AddResponseHeader=X-Response-leolei,BlueResponse
    #            - RemoveResponseHeader=Content-Type
    #            - SetResponseHeader=Date,2025-10-31
    #            - PrefixPath=/pay
                - SetPath=/pay/gateway/{segment} # {segment}表示占位符,你写abc也行但要上下一致
    
  2. 测试,启动支付微服务 8001、负载均衡80、服务网关 9527 和服务链路追踪 Zipkin,若未关闭之前的服务,可以只重启服务网关 9527即可。然后在浏览器中测试网址http://localhost:9527/XYZ/abc/filter注意,先启动服务链路追踪 Zipkin。

    这里访问的网址是http://localhost:9527/XYZ/abc/filter,但实际访问的是http://localhost:9527/pay/gateway/filter。这里将具体网址交给服务网关的过滤器管理了,只需打开修改的网址访问即可。打开浏览器开发者模式查看具体访问的网址,如下图所示。

    在这里插入图片描述

11.第四组之 RedirectTo GatewayFilter Factory

该服务网关过滤工厂用于重定向到某个页面。RedirectTo 携带了三个参数,分别是 status、url 和 includeRequestParams,当访问指定网址时就重定向到指定的 url 网址去,具体的信息如下所示。

在这里插入图片描述

具体操作如下所示。

  1. 修改服务网关 9527 的 application.yml 配置文件,在 filters 下添加参数 RedirectTo,当访问网址的状态码为 300 系列重定向到某个页面,具体的配置信息如下所示。

            - id: pay_routh3 #pay_routh3
              uri: lb://cloud-payment-service                #匹配后提供服务的路由地址
              predicates:
                - Path=/pay/gateway/filter/**              # 断言,路径相匹配的进行路由
    #            - Path=/gateway/filter/**              # 断言,路径相匹配的进行路由
    #            - Path=/XYZ/abc/{segment} # 断言,为配合SetPath测试,{segment}的内容最后被SetPath取代
              filters:
                - AddRequestHeader=X-Request-atguigu1,atguiguValue1  # 请求头kv,若一头含有多参则重写一行设置
    #            - AddRequestHeader=X-Request-atguigu2,atguiguValue2
    #            - RemoveRequestHeader=sec-fetch-site
    #            - SetRequestHeader=sec-fetch-mode,Bulue-updatebyleolei
    #            - AddRequestParameter=customerId,6666
    #            - RemoveRequestParameter=customerName
    #            - AddResponseHeader=X-Response-leolei,BlueResponse
    #            - RemoveResponseHeader=Content-Type
    #            - SetResponseHeader=Date,2025-10-31
    #            - PrefixPath=/pay
    #            - SetPath=/pay/gateway/{segment} # {segment}表示占位符,你写abc也行但要上下一致
                - RedirectTo=302,http://www.atguigu.com/ # 访问http://localhost:9527/pay/gateway/filter跳转到http://www.atguigu.com/
    
  2. 测试,启动支付微服务 8001、负载均衡80、服务网关 9527 和服务链路追踪 Zipkin,若未关闭之前的服务,可以只重启服务网关 9527即可。然后在浏览器中测试网址http://localhost:9527/pay/gateway/filter注意,先启动服务链路追踪 Zipkin。

    这里访问的网址http://localhost:9527/pay/gateway/filter,然后重定向到 http://www.atguigu.com/。打开浏览器开发者模式查看如下图所示。

    在这里插入图片描述

12.第五组之 Default Filters

该默认过滤器 Default Filters 配置在此处相当于全局通用,自定义秒变 Global。具体的配置方法如下所示。

在这里插入图片描述

至此,服务网关 Gateway 高级特性 Filter 的单一内置过滤器就配置到此。

上一篇 9-SpringCloud-服务网关 Gateway-高级特性之 Filter-1

<think>嗯,用户现在想了解SpringCloud Gateway作为API网关的作用和功能。之前我们讨论过OpenFeign的服务间调用,现在转向API网关,可能需要先理清两者的关系。用户可能是在构建微服务架构,需要了解不同组件的分工。SpringCloud Gateway和OpenFeign都属于SpringCloud生态,但职责不同,前者负责入口流量管理,后者处理服务间调用。首先,我需要根据提供的引用内容整理Gateway的作用。引用[1]提到它处理请求路由、认证授权、限流降级,高性能且与Spring生态集成。引用[2]补充了负载均衡、服务发现等功能。引用[4]提到Filter分为GatewayFilter和GlobalFilter,用于处理请求。用户的问题可能希望得到详细的功能分类,比如路由、过滤、负载均衡等。需要确保每个功能点都有对应的引用支持。同时,用户之前的讨论涉及OpenFeign的声明式调用和负载均衡,这里可以对比Gateway的负载均衡是服务端还是客户端?根据引用[2],Gateway自己处理负载均衡,可能集成Ribbon或者SpringCloud LoadBalancer。 需要注意回答的结构,按照核心作用分点,每个点下展开子功能。比如路由转发作为第一点,包括动态路由、路径匹配等。然后安全相关,如认证授权,接着是流量控制,如限流降级。还有过滤器机制,集成监控等。此外,要区分与Zuul的差异,比如性能更高,基于异步非阻塞模型。可能用户没有明确问比较,但提到其他网关如Zuul,可以简要说明优势。同时,确保每个功能点都有引用标注,比如动态路由引用[1][2],过滤器引用[4],限流引用[1][2]等。需要避免技术术语过于复杂,用易懂的语言解释。比如动态代理和路由的区别,可能需要关联用户之前了解的OpenFeign动态代理,但这里是网关级别的路由。另外,问题部分需要生成相关问题,可能涉及配置步骤、过滤器使用、性能优化、与Zuul对比、限流实现等,确保问题有逻辑关联,帮助用户深入理解。</think>### Spring Cloud Gateway作为API网关的作用与功能 --- #### 1. **统一入口与路由转发** - **动态路由配置**:通过简单的YAML或Java配置,将外部请求路由到不同的微服务实例[^1][^2]。例如,将`/user/**`的请求转发到用户服务,`/order/**`的请求转发到订单服务。 - **路径匹配与重写**:支持通配符、正则表达式匹配请求路径,并可对请求路径进行重写[^3]。 - **负载均衡**:集成服务发现(如Eureka、Consul),自动从注册中心获取服务实例列表,并通过负载均衡策略(如轮询、权重)分配请求[^2]。 #### 2. **安全控制与权限管理** - **认证与鉴权**:通过集成OAuth2、JWT等机制,实现请求的身份验证(如校验Token)和权限控制(如角色校验)[^1][^2]。 - **请求头处理**:可添加、修改或删除请求头,例如透传认证信息或添加自定义标头。 #### 3. **流量控制与容错保护** - **限流(Rate Limiting)**:基于令牌桶、漏桶算法限制接口的请求频率,防止突发流量压垮服务[^1][^2]。例如配置每秒最多100次请求。 - **熔断降级**:与Hystrix或Resilience4j集成,在服务响应超时或异常时触发熔断,返回预设的降级响应(如默认错误页)[^1]。 - **重试机制**:针对服务调用失败的情况,配置重试次数和条件(如仅对GET请求重试)。 #### 4. **请求与响应处理** - **过滤器链(Filters)**:通过内置或自定义的`GatewayFilter`和`GlobalFilter`,实现请求的预处理和响应的后处理[^4]。例如: - **日志记录**:记录请求参数和响应状态。 - **请求耗时统计**:添加计时过滤器统计接口性能。 - **请求体修改**:压缩请求内容或加密敏感数据。 - **跨域处理(CORS)**:统一配置跨域请求的允许来源、方法和头部信息。 #### 5. **监控与可观测性** - **集成监控工具**:支持对接Prometheus、Spring Boot Actuator,暴露网关的流量指标(如请求量、延迟、错误率)[^1]。 - **链路追踪**:通过集成Sleuth和Zipkin,为请求添加唯一Trace ID,实现全链路追踪。 #### 6. **性能优化** - **异步非阻塞模型**:基于Netty和Reactor实现高并发处理能力,对比传统同步网关(如Zuul 1.x)性能提升显著[^3]。 - **响应缓存**:缓存高频请求的响应结果,减少后端服务压力。 --- ### 示例:路由配置 ```yaml spring: cloud: gateway: routes: - id: user_service uri: lb://user-service # 负载均衡到user-service服务 predicates: - Path=/api/user/** filters: - StripPrefix=2 # 移除路径前缀/api/user - AddRequestHeader=X-Request-From, gateway ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值