【spring 】Spring Cloud Gateway 的Filter学习

介绍和使用场景

Spring Cloud Gateway 是一个基于 Spring Framework 5 和 Project Reactor 的 API 网关,它旨在为微服务架构提供一种简单而有效的方式来处理请求路由、过滤、限流等功能。在 Spring Cloud Gateway 中,Filter 扮演着非常重要的角色,以下是 Filter 的一些主要作用:

  1. 请求路由:Filter 可以根据请求的特定条件(如路径、头信息、参数等)将请求路由到不同的服务。

  2. 请求修改:在请求被路由到目标服务之前,Filter 可以修改请求的内容,比如添加或删除请求头、修改请求参数等。

  3. 响应修改:Filter 可以在将响应返回给客户端之前修改响应的内容,比如添加或删除响应头、修改响应体等。

  4. 身份验证和授权:Filter 可以用于实现安全控制,比如检查请求中的认证信息,确保只有授权的用户才能访问特定的资源。

  5. 限流和熔断:Filter 可以实现限流功能,控制对特定服务的访问频率,以及熔断机制,防止服务过载。

  6. 日志记录和监控:Filter 可以在请求和响应的生命周期中记录日志,用于监控和调试。

  7. 请求聚合:Filter 可以将多个微服务的响应聚合到一个响应中,实现数据的聚合和重组。

  8. 错误处理:Filter 可以捕获和处理请求处理过程中的错误,返回给客户端统一的错误响应。

  9. 跨域资源共享(CORS):Filter 可以处理跨域请求,添加必要的响应头,以支持前端应用的跨域请求。

  10. 缓存控制:Filter 可以实现缓存机制,减少对后端服务的请求,提高系统性能。

常见gateway的filter

spring gateway的filter 包路径org.springframework.cloud.gateway.filter

  1. Built-in Filter Factories(内置过滤器工厂):Spring Cloud Gateway 提供了一系列内置的过滤器工厂,这些工厂可以用来实现常见的功能,如请求头修改、路径重写等。这些过滤器工厂是预定义的,可以直接在配置中使用。

  2. Custom Filters(自定义过滤器):除了内置的过滤器工厂,Spring Cloud Gateway 还支持自定义过滤器的开发。开发者可以根据自己的需求实现特定的逻辑,比如添加认证、日志记录等。

  3. Pre-filter(前置过滤器):在路由到微服务之前执行的过滤器。这类过滤器通常用于修改请求头、认证、日志记录等。

  4. Post-filter(后置过滤器):在路由到微服务之后执行的过滤器。这类过滤器可以用于修改响应头、日志记录等。

  5. Global Filter(全局过滤器):全局过滤器会对所有的路由请求生效,通常用于实现跨域资源共享(CORS)等全局性的功能。

  6. Route Filter(路由过滤器):与特定路由关联的过滤器,用于处理特定路由的请求和响应

1. AddRequestHeader

这个 Filter 用于在请求中添加一个 HTTP 头。

vbnet 复制代码
filters:
  - AddRequestHeader=X-Request-Foo, Bar

这会在请求中添加一个名为 X-Request-Foo 的头,其值为 Bar。

2. AddRequestParameter

这个 Filter 用于在请求中添加一个查询参数。

vbnet 复制代码
filters:
  - AddRequestParameter=foo, bar

这会在请求中添加一个名为 foo 的查询参数,其值为 bar。

3. AddResponseHeader

这个 Filter 用于在响应中添加一个 HTTP 头。

vbnet 复制代码
filters:
  - AddResponseHeader=X-Response-Foo, Bar

这会在响应中添加一个名为 X-Response-Foo 的头,其值为 Bar。

4. DedupeResponseHeader

这个 Filter 用于在响应中删除重复的 HTTP 头。

vbnet 复制代码
filters:
  - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

这会删除响应中重复的 Access-Control-Allow-Credentials 和 Access-Control-Allow-Origin 头。

5. PrefixPath

这个 Filter 用于在请求路径前添加一个前缀。

vbnet 复制代码
filters:
  - PrefixPath=/mypath

这会在请求路径前添加 /mypath 前缀。

6. PreserveHostHeader

这个 Filter 用于保留原始请求的主机头。

vbnet 复制代码
filters:
  - PreserveHostHeader
复制代码

7. RequestRateLimiter

这个 Filter 用于限制请求速率。

vbnet 复制代码
filters:
  - name: RequestRateLimiter
    args:
      key-resolver: "#{@userKeyResolver}"
      redis-rate-limiter.replenishRate: 10
      redis-rate-limiter.burstCapacity: 20

这会使用 Redis 来限制请求速率。

8. RewritePath

这个 Filter 用于重写请求路径。

vbnet 复制代码
filters:
  - RewritePath=/foo/(?<segment>.*), /$\{segment}

这会将 /foo/bar 重写为 /bar。

9. SetPath

这个 Filter 用于设置请求路径。

vbnet 复制代码
​
filters:
  - SetPath=/{segment}

​

这会将请求路径设置为 /segment。

10. SetRequestHeader

这个 Filter 用于设置请求头。

vbnet 复制代码
filters:
  - SetRequestHeader=X-Request-Foo, Bar

这会将请求头 X-Request-Foo 设置为 Bar。

11. SetResponseHeader

这个 Filter 用于设置响应头。

vbnet 复制代码
filters:
  - SetResponseHeader=X-Response-Foo, Bar

这会将响应头 X-Response-Foo 设置为 Bar。

12. StripPrefix

这个 Filter 用于去除请求路径的前缀。

vbnet 复制代码
filters:
  - StripPrefix=1

这会去除请求路径的第一个前缀。

13. Retry

这个 Filter 用于重试请求。

vbnet 复制代码
filters:
  - name: Retry
    args:
      retries: 3
      statuses: BAD_GATEWAY

这会在请求失败时重试 3 次。

14. RequestSize

这个 Filter 用于限制请求的大小。

vbnet 复制代码
filters:
  - name: RequestSize
    args:
      maxSize: 5000000

这会限制请求的大小为 5MB。

15. ModifyRequestBody

这个 Filter 用于修改请求体。

vbnet 复制代码
filters:
  - name: ModifyRequestBody
    args:
      contentType: "application/json"
      rewriteFunction: "com.example.RewriteRequestBody::rewrite"

这会使用自定义的 rewrite 方法来修改请求体。

16. ModifyResponseBody

这个 Filter 用于修改响应体。

vbnet 复制代码
filters:
  - name: ModifyResponseBody
    args:
      contentType: "application/json"
      rewriteFunction: "com.example.RewriteResponseBody::rewrite"

这会使用自定义的 rewrite 方法来修改响应体。

17. SecureHeaders

这个 Filter 用于添加安全相关的响应头。

vbnet 复制代码
filters:
  - SecureHeaders

这会添加一些安全相关的响应头,如 X-XSS-Protection、X-Frame-Options 等。

18. FallbackHeaders

这个 Filter 用于在发生错误时添加响应头。

vbnet 复制代码
filters:
  - FallbackHeaders

这会在发生错误时添加一些响应头。

19. RequestHeaderToRequestUri

这个 Filter 用于将请求头转换为请求 URI。

vbnet 复制代码
filters:
  - RequestHeaderToRequestUri=X-CF-Forwarded-Url

这会将 X-CF-Forwarded-Url 头的内容转换为请求 URI。

20. SetStatus

这个 Filter 用于设置响应状态码。

vbnet 复制代码
filters:
  - SetStatus=401

这会将响应状态码设置为 401。




相关推荐
逃逸线LOF2 小时前
服务网关Gateway
java·运维·gateway
坤坤子吖3 小时前
Linux网络编程:TCP服务器的多进程与多线程实现
linux·服务器·开发语言·网络·c++·笔记·学习
蒸蒸yyyyzwd5 小时前
后端相关学习笔记。
笔记·学习
旖旎夜光6 小时前
【C++ 基础入门】C++ 多态(上):虚函数、重写、override/final 与抽象类
开发语言·c++·笔记·学习
驭渊的小故事8 小时前
Spring AOP 核心概念与通知类型详解
java·后端·spring
橙橙笔记8 小时前
QT的学习第四部分
linux·qt·学习·音视频
叼烟扛炮8 小时前
Linux 学习笔记(五十四):内网穿透实战——用 frp 让外网访问你的私人电脑
linux·服务器·网络·笔记·学习
在猴站学算法8 小时前
(《统计学习方法》(第2版) 李航)第2章 感知机算法
学习·算法·机器学习·统计学习
驭渊的小故事9 小时前
Spring AOP 入门:从 AOP 概念到第一个耗时统计切面
java·后端·spring
旖旎夜光9 小时前
【C++ 基础入门】C++ 继承(上):概念、切片、隐藏、默认成员函数与友元
c++·笔记·学习