当前位置: 首页 > article >正文

关于Spring Cloud Gateway中 Filters的理解

Spring Cloud Gateway中 Filters的理解

Filters

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

可以进行流量染色

增加请求头

例子

spring:
  cloud:
    gateway:
      routes:
        - id: add_request_header_route
          uri: http://localhost:8123
          predicates:
            - 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_route
          uri: http://localhost:8123
          predicates:
            - 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_route
          uri: http://localhost:8123
          predicates:
            - 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_route
          uri: http://localhost:8123
          predicates:
            - Path=/api/**
          filters:
            - AddResponseHeader=ylxresponse,success
            - name: CircuitBreaker
              args: 
                name: myCircuitbreaker
                fallbackUri: forward:/fallback
        - id: new_route
          uri: https://www.ylxovo.cyou
          predicates:
            - 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_route
        uri: lb://downstream
        predicates:
        - Path=/downstream/**
        filters:
        - name: CacheRequestBody
          args:
            bodyClass: java.lang.String

DedupeResponseHeader 去重复

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

spring:
  cloud:
    gateway:
      routes:
      - id: dedupe_response_header_route
        uri: https://example.org
        filters:
        - DedupeResponseHeader=Access-Control-Allow-Credentials Access-Control-Allow-Origin

Retry Gateway filter 重试

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

配置Retry网关过滤器

spring:
  cloud:
    gateway:
      routes:
        - id: retry_route
          uri: http://httpbin.org
          filters:
            - name: Retry
              args:
                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
              - OPTIONS
            allowedHeaders:
              - "*"
            allowCredentials: true

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

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


http://www.kler.cn/a/309515.html

相关文章:

  • STM32学习笔记------GPIO介绍
  • 25浙江省考-专项刷题(资料分析)-错题本
  • SSE (Server-Sent Events) 服务器实时推送详解
  • 学习方法——看差的书籍
  • windows下qt5.12.11使用ODBC远程连接mysql数据库
  • arm 汇编技巧
  • 健身房预约小程序定制搭建,数字化运营管理
  • Python+Pytest框架,“api_key.py文件怎么编写“?
  • 【乐企-业务篇】生成发票左上角二维码
  • Linux和C语言(Day 12)
  • 华南医电科技集团受邀出席中马建交50周年高级别经贸合作交流活动
  • [Redis] Redis中的set和zset类型
  • 云轴科技ZStack 获鲲鹏应用创新大赛2024上海赛区决赛一等奖
  • vue3-print打印eletable某一行的数据
  • TI AM62X Secure Boot 流程简述
  • (黑马点评)六、好友关注系列功能实现
  • C语言 | Leetcode C语言接雨水II
  • vscode中前端项目文件格式化备份
  • Apple M3编译OpenSSL安卓平台SO库
  • django orm查询优化
  • Unity常用随机数算法
  • linux-Shell 编程-常用 Shell 脚本技巧
  • Python--数据格式转换
  • 在react中 使用redux
  • ubuntu安装wordpress(基于LNMP环境)
  • GBase8c主备版500升级步骤