欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 关于Spring Cloud Gateway中 Filters的理解

关于Spring Cloud Gateway中 Filters的理解

2025/4/29 6:43:01 来源:https://blog.csdn.net/m0_59751050/article/details/142259605  浏览:    关键词:关于Spring Cloud Gateway中 Filters的理解

Spring Cloud Gateway中 Filters的理解

Filters

Filters拦截器的作用是,对请求进行处理

可以进行流量染色

增加请求头

例子

spring:cloud:gateway:routes:- id: add_request_header_routeuri: http://localhost:8123predicates:- Path=/api/**filters:- AddRequestHeader=ylx,666

访问 http://localhost:8080/api/name 自动跳转到 http://localhost:8123/api/name

http://localhost:8123/api/name 后端中获取request.getHeader(“ylx”) 中的请求头,打印出来666

说明添加请求头成功

我们可以通过在请求头上添加信息,特定的标识,可以实现对接口的保护,确保只有带有这个请求头的请求才能被下游的服务认可并允许调用。这就是流量染色

⭐增加请求参数

spring:cloud:gateway:routes:- id: add_request_header_routeuri: http://localhost:8123predicates:- Path=/api/**filters:- AddRequestHeader=ylx,666- AddRequestParameter=name,ylx

在这里插入图片描述

过滤器AddRequestParameter=name,ylx 添加ylx到参数name中

❓为什么控制器方法参数没有添加注解@RequestParam gateway网关中配置的添加请求参数也能添加到控制器的方法参数中?
💡请求参数默认绑定: 在 GET 请求中,控制器方法的参数如果与请求中的参数名匹配,Spring MVC 会自动将请求参数绑定到方法参数上。这种自动绑定的行为是 Spring MVC 的核心功能之一,不需要显式的 @RequestParam 注解。@RequestParam 注解只是用于明确指定请求参数名和方法参数之间的映射关系,但如果参数名匹配,Spring MVC 会自动处理这个绑定。

添加响应头

server:port: 8080
spring:cloud:gateway:routes:- id: add_request_header_routeuri: http://localhost:8123predicates:- Path=/api/**filters:- AddResponseHeader=ylxresponse,success

访问 localhost:8080/api/name 自动跳转到 localhost:8123/api/name

打开浏览器控制台,查看响应,响应成功

在这里插入图片描述

CircuitBreaker(断路器)

断路器的作用:实现服务的降级。

使用前提:
添加依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-circuitbreaker-reactor-resilience4j</artifactId>
</dependency>

在项目gateway中添加配置

spring:cloud:gateway:routes:- id: add_request_header_routeuri: http://localhost:8123predicates:- Path=/api/**filters:- AddResponseHeader=ylxresponse,success- name: CircuitBreakerargs: name: myCircuitbreakerfallbackUri: forward:/fallback- id: new_routeuri: https://www.ylxovo.cyoupredicates:- Path=/fallback

解释:

路由一

add_request_header_route

重定向地址:http://localhost:8123

断言:Path=/api/**

过滤器:

  1. 添加响应头:ylxresponse,success
  2. 添加断路器:
    1. name: CircuitBreaker
    2. 参数args:
      1. name: 短路器名称
      2. 降级地址:forward:/fallback

路由二

new_route

重定向地址:https://www.ylxovo.cyou

断言:Path=/fallback

add_request_header_route路由会添加响应头,并通过断路器实现降级功能。当路由的目标地址出现故障,请求会被转发到 /fallback路由,路由二的断言规则符合,则将路由转发到路由二中,即new_route

CacheRequestBody

作用:让原本的请求信息中的body参数可以被多次读取。默认情况下,请求中的body参数只能被读取一次,使用这个配置之后,可以多次的读取请求中的body参数,并将其作为一个持久化的缓存。

spring:cloud:gateway:routes:- id: cache_request_body_routeuri: lb://downstreampredicates:- Path=/downstream/**filters:- name: CacheRequestBodyargs:bodyClass: java.lang.String

DedupeResponseHeader 去重复

作用:请求经过多个服务器之后,每个服务器都会添加一个跨域头。但是都是重复的跨域头,可能会导致最终跨域失败,为了解决这个问题,我们可以使用这个配置来去除重复的响应头;检查响应头是否包含重复的头信息,并进行去重处理。另外还提供了一些去重策略。

spring:cloud:gateway:routes:- id: dedupe_response_header_routeuri: https://example.orgfilters:- DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

Retry Gateway filter 重试

Retry 网关过滤器在 Spring Cloud Gateway 中用于自动重试失败的请求。这对于处理临时性的网络问题或者服务的不稳定性非常有用。

配置Retry网关过滤器

spring:cloud:gateway:routes:- id: retry_routeuri: http://httpbin.orgfilters:- name: Retryargs:retries: 3 # 设置重试次数statuses: 500, 502, 503, 504 # 设置哪些 HTTP 状态码会触发重试backoff: 2000 # 设置重试的间隔时间,单位是毫秒predicates:- Path=/delay/3

⭐Default filters 默认过滤器

以上我们过滤器都是在单个路由下,只在一个路径下生效,或者是对一个断言生效。

Default filters 可以给整个网关订一些默认的过滤器,比如染色功能

全局的染色:给所有经过网关的请求都加一个响应头

spring:cloud:gateway:default-filters:- AddResponseHeader=source, ylx

⭐跨域配置

可以直接在网关定义想要的跨域配置、可以指定允许跨域的请求头,那些请求需要跨域支持,以及允许的跨域方法,通过网关配置可以简单的集中地管理跨域设置

Spring Cloud Gateway 并不直接提供一个全局的 CORS 过滤器,而是通过 Spring 的标准方式配置 CORS。你可以通过 Spring Boot 的 CorsConfigurationCorsConfigurationSource 实现这个功能。下面是具体的步骤和示例:

spring:cloud:gateway:globalcors:cors-configurations:"[/**]":allowedOrigins: "*"allowedMethods:- GET- POST- PUT- DELETE- OPTIONSallowedHeaders:- "*"allowCredentials: true

这个配置会为所有路径([/**])启用 CORS。具体参数说明如下:

  • allowedOrigins: 允许哪些源访问,* 表示允许所有源。你可以根据需要设置具体的源地址。
  • allowedMethods: 允许的 HTTP 方法。你可以指定 GET, POST, PUT, DELETE, OPTIONS 等。
  • allowedHeaders: 允许的请求头,* 表示允许所有头部。你也可以设置具体的头部名称。
  • allowCredentials: 是否允许发送凭证(如 cookies)。设置为 true 表示允许。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词