Spring Cloud GateWay 全局过滤器

public class CustomGlobalFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info("custom global filter");
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return -1;
    }
}

全局过滤器是什么? 

这是一个自定义的 Spring Cloud Gateway 全局过滤器(Global Filter)。在 Spring Cloud Gateway 中,全局过滤器可以在请求被路由到目标服务之前或之后执行一些操作。这个过滤器实现了 GlobalFilter 接口和 Ordered 接口,这两个接口的作用如下:

  1. GlobalFilter 接口: 这是一个 Spring Cloud Gateway 提供的接口,用于定义全局过滤器。全局过滤器能够处理进入网关的请求和返回的响应。在这个自定义过滤器中,filter 方法被实现,它接收 ServerWebExchange 对象和 GatewayFilterChain 对象作为参数。在这个方法内部,你可以编写逻辑来处理请求,然后调用 chain.filter(exchange) 继续执行后续过滤器链和路由操作。

  2. Ordered 接口: 这是 Spring Framework 提供的接口,用于确定对象的顺序。在 Spring Cloud Gateway 中,过滤器的执行顺序非常重要,可以通过实现 Ordered 接口的 getOrder() 方法来定义过滤器的顺序。在这个例子中,过滤器的顺序被设置为 -1,这表示这个过滤器将在所有默认顺序为 0 的过滤器之前执行。

总结起来,这个自定义全局过滤器会在请求进入 Spring Cloud Gateway 时被调用,在日志中打印 "custom global filter",然后继续执行后续过滤器链和路由操作。由于实现了 Ordered 接口并返回 -1,这个过滤器将会在默认的全局过滤器之前被执行。

什么是ServerWebExchange ?

ServerWebExchange 是 Spring WebFlux 中的一个核心接口,它代表了一个服务器端的 HTTP 交换过程,包含了客户端请求和服务器响应的各种信息。在 Spring Cloud Gateway 或 Spring WebFlux 应用中,它被广泛用于处理和操作 HTTP 请求和响应。

ServerWebExchange 接口提供了许多方法,用于获取和操作与 HTTP 请求和响应相关的信息,包括:

  • getRequest(): 获取代表客户端请求的 ServerRequest 对象,可以从中获取请求方法、URI、请求头、请求参数等信息。

  • getResponse(): 获取代表服务器响应的 ServerResponse 对象,可以从中设置响应状态码、响应头、响应体等信息。

  • getAttributes(): 获取一个属性的键值对集合,可以用于在不同的过滤器之间共享数据。

  • mutate(): 复制当前的 ServerWebExchange 并进行修改,用于创建一个新的 ServerWebExchange 对象。

  • getPrincipal(): 获取当前用户的身份信息,通常用于鉴权和认证。

  • getFormData(): 获取表单数据,通常在 POST 请求中解析表单数据。

在自定义过滤器、处理器函数和其他与请求响应处理相关的地方,你可以使用 ServerWebExchange 对象来获取和操作与请求响应相关的信息。这个接口的灵活性使得你能够在 Spring WebFlux 应用中进行各种自定义的处理和操作。

什么是Spring WebFlux?

Spring WebFlux 是 Spring Framework 的一个模块,用于构建响应式(Reactive)的 Web 应用程序。与传统的基于 Servlet 的 Spring MVC 不同,Spring WebFlux 基于反应式编程模型,旨在处理高并发、高吞吐量的场景,以及需要实时性和低延迟的应用程序。

反应式编程是一种面向数据流和变化传播的编程范式,其核心概念是异步数据流和非阻塞操作。在 Spring WebFlux 中,你可以使用响应式流库(如 Reactor)来处理数据流,使得应用程序能够更有效地利用资源,并且能够应对大量的并发请求。

Spring WebFlux 提供了两种编程模型:

  1. 注解式模型: 类似于传统的 Spring MVC,你可以使用注解来定义处理器函数(Handler Functions),并且可以使用像 @RequestMapping 这样的注解来映射请求。

  2. 函数式模型: 使用函数式编程的方式定义处理器函数,这种方式更加灵活,可以更好地与响应式编程模型结合。

Spring WebFlux 可以用于构建多种类型的 Web 应用程序,包括传统的 Web 应用程序、RESTful API、实时推送、反应式流式处理等。它也是构建 Spring Cloud Gateway 这样的微服务网关的基础。总之,Spring WebFlux 为 Spring 生态系统提供了响应式编程能力,使得应用程序能够更好地适应现代的高并发和实时性需求。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值