gateway之过滤器(Filter)详解

这篇具有很好参考价值的文章主要介绍了gateway之过滤器(Filter)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是过滤器

在Spring Cloud中,过滤器(Filter)是一种关键的组件,用于在微服务架构中处理和转换传入请求以及传出响应。过滤器位于服务网关或代理中,并通过拦截请求和响应流量来提供各种功能。

过滤器在请求的不同生命周期阶段执行特定的操作,例如鉴权、认证、请求转发、限流、日志记录等。它们可以在服务调用链中的不同位置进行配置和应用,以实现各种需求和业务规则。

Spring Cloud Gateway和Zuul是两个常用的Spring Cloud组件,提供了内置的过滤器机制。

Spring Cloud Gateway使用GatewayFilter来定义过滤器。GatewayFilter可以在请求进入网关时、在路由转发之前或之后,以及在响应返回给客户端之前或之后执行操作。它们提供了丰富的功能和扩展性,如鉴权、限流、重试、请求转发、修改请求/响应等。

Zuul使用Zuul Filter来实现过滤器功能。Zuul Filter分为四种类型:pre、route、post和error。pre过滤器在请求被路由之前执行,可用于鉴权、请求限制等操作;route过滤器用于将请求路由到具体的服务实例;post过滤器在请求已经被路由到目标服务并得到响应后执行,可进行响应的日志记录、统计信息收集等操作;error过滤器处理在整个请求生命周期中发生的错误。

通过编写和配置过滤器,我们可以根据特定需求对请求和响应进行操作,从而实现强大的功能和逻辑。过滤器能够提高安全性、稳定性和可维护性,并且与Spring Cloud的其他组件集成,使得微服务架构更加灵活和可扩展。

过滤器的种类

在Spring Cloud中,过滤器(Filter)根据其作用和所处的阶段,可以分为以下几种类型:

全局过滤器(Global Filters):全局过滤器是应用于所有进入服务网关或代理的请求和响应的过滤器。它们可以执行跨服务的通用功能,如鉴权、请求日志记录、性能监控等。全局过滤器对整个微服务架构起到了全局影响,因此需要谨慎使用。

前置过滤器(Pre Filters):前置过滤器在路由转发之前执行。它们可以处理请求的验证、鉴权、参数校验等操作。前置过滤器可以拦截请求并进行必要的修改,例如添加头信息、修改请求路径等。通过前置过滤器,我们可以在请求进入系统之前对其进行预处理。

路由过滤器(Route Filters):路由过滤器在请求被路由到目标服务实例之前执行。它们可以修改请求的URL、请求头、请求体等,并决定请求应该被路由到哪个服务实例。通过路由过滤器,我们可以实现动态路由、负载均衡等功能。

后置过滤器(Post Filters):后置过滤器在请求已经被路由到目标服务实例并得到响应后执行。它们可以对响应进行处理,例如日志记录、结果转换、添加响应头等。后置过滤器常用于统一处理响应,确保响应符合统一的格式和标准。

错误过滤器(Error Filters):错误过滤器用于处理在请求生命周期中发生的错误。它们可以捕获异常、记录错误信息,并提供适当的响应给客户端。错误过滤器可以增强系统的健壮性,使其能够更好地处理异常情况。

除全局过滤器外,其他均属于局部过滤器

局部过滤器

局部过滤器(Local Filters)指的是应用于特定路由或服务实例的过滤器。它们可以针对某个具体的路由进行处理,并只对该路由的请求和响应生效。后置过滤器是局部过滤器的一种形式,它在请求被路由到目标服务实例并得到响应后执行。

通过定义后置过滤器,您可以对从后端服务返回的响应进行处理和修改。例如,您可以在后置过滤器中添加响应头、记录日志、转换响应结果等操作。后置过滤器提供了一个在请求生命周期的最后阶段对响应进行加工的机会。

代码示例

以下是一个路由过滤器的例子

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;

@Component
public class CustomRouteFilter extends AbstractGatewayFilterFactory<CustomRouteFilter.Config> {

    public CustomRouteFilter() {
        super(Config.class);
    }

    @Override
    public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {
            // 在路由请求之前执行的操作
            System.out.println("执行路由过滤器");
            // 可以根据需要对请求进行修改、验证等操作

            return chain.filter(exchange);
        };
    }

    public static class Config {
        // 配置参数(可选)
    }

}

在上述示例中,我们创建了一个名为CustomRouteFilter的类,并继承了AbstractGatewayFilterFactory。同样,Config是用于配置参数的类,根据需要进行自定义。

然后,我们重写了apply方法,并在其中编写了自定义的路由过滤器逻辑。在这个示例中,我们简单地打印了一条消息,表示路由过滤器被执行。

通过将此自定义路由过滤器添加到Spring Cloud Gateway的路由配置中,它将在路由请求之前执行特定逻辑。您还可以根据需要对请求进行修改、验证等操作。

全局过滤器

全局过滤器是应用于所有进入服务网关或代理的请求和响应的过滤器。它们可以执行跨服务的通用功能,如鉴权、请求日志记录、性能监控等。全局过滤器对整个微服务架构起到了全局影响,因此需要谨慎使用。

代码示例

在全局过滤器中,过滤的类需要去实现GlobalFilter 接口。

@Component
public class LogFilter implements GlobalFilter {
    Logger log=  LoggerFactory.getLogger(this.getClass());
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        log.info(exchange.getRequest().getPath().value());
        return chain.filter(exchange);
    }
}

此代码为记录日志的全局过滤器,当执行时,会在控制台记录其对应的日志信息。
gateway过滤器,springcloud中间件,gateway,java,网络

总结

作为Spring Cloud Gateway中的重要组件,Filter可以对传入的HTTP请求进行处理,以便对其进行修改或验证,或者在路由到目标服务之前/之后执行特定逻辑。Filter是Gateway的核心部分,用于提供一种通用的机制来处理HTTP请求,并帮助实现更强大、高效和安全的网关。

Spring Cloud Gateway提供了三种不同类型的Filter:全局过滤器、局部前置过滤器和局部后置过滤器。其中,全局过滤器将应用于所有路由,而局部过滤器则仅适用于指定的路由。

通过自定义Filter,我们可以实现多种自定义需求。例如,我们可以创建一个针对具体请求路径的认证过滤器,以验证用户是否有访问相应资源的权限;也可以编写一个记录日志的Filter,在请求被路由到目标服务之前/之后输出相关日志信息。

编写自定义Filter的步骤通常包括以下几点:

创建一个继承AbstractGatewayFilterFactory的Filter类。
在Filter类中重写apply方法并编写自定义逻辑。
配置Filter类中所需的参数(可选)。
在Spring Cloud Gateway的路由配置中添加Filter。
当然,需要根据实际需求进行调整,例如定义不同类型、不同粒度的Filter等等。

总之,Filters提供了一种灵活、可靠且可扩展的机制,以便应对各种需求。在开发网关时,Filter是非常重要的组件,其在保证高效性和可扩展性方面都具有重要作用。文章来源地址https://www.toymoban.com/news/detail-752177.html

到了这里,关于gateway之过滤器(Filter)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • SpringCloud GateWay 在全局过滤器中注入OpenFeign网关后无法启动

    目录 一、问题 二、原因 1、修改配置 2、添加@Lazy注解在client上面  3、启动成功 当在gateway的全局过滤器GlobalFilter中注入OpenFeign接口的时候会一直卡在路由中,但是不会进一步,导致启动未成功也未报错失败 在gateway网关中不能使用openfeign同步调用 三、解决方法 在注入的Aut

    2024年01月19日
    浏览(45)
  • PHP伪协议filter详解,php://filter协议过滤器

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 php:// 用来访问输入和输出流(I/O streams)。 输入/输出流也就是 「数据流」

    2024年02月08日
    浏览(38)
  • JavaWeb过滤器(Filter)详解,是时候该把过滤器彻底搞懂了(万字说明)

            注意:这篇文章很长,学习完后将会解决你对于过滤器(Filter)的所有疑惑,下面将通过理论和代码的结合来进行讲解演示.....    目录 基本介绍 过滤器原理 过滤器(Filter)接口 使用过滤器(Filter) 创建过滤器(Fliter) 使用过滤器(Filter) 配置过滤器(Filter)拦截路径  注解方式

    2024年02月02日
    浏览(41)
  • SpringBoot之过滤器Filter详解及登录校验

    目录 1 快速入门 2.Filter详解 2.1 执行流程 2.2 拦截路径 2.3 过滤器链 3.登录校验-Filter 3.1 分析 3.2 具体流程 3.3 代码实现 什么是Filter? Filter表示过滤器,是 JavaWeb三大组件(Servlet、Filter、Listener)之一。 过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能 使用了过滤器

    2024年02月04日
    浏览(44)
  • 详解过滤器Filter和拦截器Interceptor的区别和联系

    目录 前言 区别 联系 过滤器(Filter)和拦截器(Interceptor)都是用于在Web应用程序中处理请求和响应的组件,但它们在实现方式和功能上有一些区别。 1. 实现方式: - 过滤器是基于Servlet规范的组件,通过实现 javax.servlet.Filter接口 来定义。过滤器可以在请求被处理之前和响应被发送

    2024年02月11日
    浏览(48)
  • Spring Cloud Gateway 过滤器详解

    Spring Cloud Gateway根据作用范围划分为:GatewayFilter和GlobalFilter 由filter工作流程点,可以知道filter有着非常重要的作用,在“pre”类型的过滤器可以做参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中可以做响应内容、响应头的修改,日志的输

    2023年04月08日
    浏览(39)
  • 一文详解过滤器Filter、拦截器Interceptor和切面Aspect的区别

    目录 Filter过滤器 作用 应用场景 拦截器Interceptor Aspect切片 三者对比 执行顺序 拦截层面 过滤器Filter和拦截器Interceptor的区别 Filter 过滤器它是 JavaWeb 的三大组件之一 三大组件分别是:Servlet 程序、Listener 监听器、Filter 过滤器 Filter 过滤器它是 JavaEE 的规范 Filter随web应用的启动

    2024年02月04日
    浏览(42)
  • 【Java】SpringCloud Gateway自定义过滤器中获取ServerHttpRequest的body中的数据为NULL的问题

    这个情况出现在,我需要进行验证码的校验,因此用户的请求首先需要被验证码过滤器校验,而验证码过滤器不需要设定为全局过滤器,因此我就单纯的把它设定为了一个局部过滤器,代码如下 然后我进行请求的时候,json参数如下 然后请求经过解析后会发现,字符串居然是

    2024年02月09日
    浏览(53)
  • Spring Cloud Gateway过滤器GlobalFilter详解

    一、过滤器的场景 在springCloud架构中,网关是必不可少的组件,它用于服务路由的转发。对客户端进行屏蔽微服务的具体细节,客户端只需要和网关进行交互。所以网关顾名思义,就是网络的一个关卡。它就是一座城的城门守卫。所以这个守卫就可以做很多工作,比如对来访

    2024年02月14日
    浏览(41)
  • 【Spring】Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    Springboot过滤器Filter和拦截器Inteceptor详解及使用场景

    2024年02月13日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包