Java中的gateway自定义过滤器详解

 更新时间:2023年11月17日 11:30:46   作者:小菜鸡9527  
这篇文章主要介绍了Java中的gateway自定义过滤器详解,过滤器是指gateway在路由过程中(A地址路由到B地址)生效进行过滤操作的,所有首先你得先配一个地址路由,本文提供了部分实现代码,需要的朋友可以参考下

全局过滤器(GloabalFilter)

注意:

过滤器是指gateway在路由过程中(A地址路由到B地址)生效进行过滤操作的,所有首先你得先配一个地址路由。比如我站在这里设置将//localhost:8000/gateway/* 请求路由到//localhost:8010/user/*,那么下面的两个样例过滤器遍对这个过程进行过滤

        - id: user_route
          uri: lb://server-user
          #uri: http://localhost:8010
          predicates:
            - Path=/gateway/**
          filters:
            - RewritePath=/gateway/(?<segment>.*),/user/$\{segment}

开启gateway的日志,方便后面查看过程

logging:
  level:
    org.springframework.cloud.gateway: DEBUG

前置过滤器

@Component
public class MyHeadFilter implements GlobalFilter, Ordered {
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("123123");
        return chain.filter(exchange);
    }

    @Override
    public int getOrder() {
        return 0;
    }
}

后置过滤器

@Component
public class MyTailFilter implements GlobalFilter, Ordered {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        return chain.filter(exchange)
                .then(Mono.fromRunnable(
                        () -> System.out.println("abcabc")
                ));
    }
    @Override
    public int getOrder() {
        return 0;
    }
}

运行结果

然后访问//localhost:8000/gateway/listAll,路由到//localhost:8010/user/listAll成功

控制台输出

在这里插入图片描述

局部过滤器

有两种方式:

  • 在上面全局模式的基础上,改为实现gatewayFilter和Ordered接口
  • 继承AbstractGatewayFilterFactory类(推荐)

局部过滤器实现

public class MyPartGatewayFilterFactory extends AbstractGatewayFilterFactory<MyPartGatewayFilterFactory.Config> {

    private static final Log log = LogFactory.getLog(GatewayFilter.class);
    private static final String NAME = "name";

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

    @Override
    public List<String> shortcutFieldOrder() {
        return Arrays.asList(NAME);
    }

    @Override
    public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {
            return chain.filter(exchange).then(
                    Mono.fromRunnable(() -> {
                        StringBuilder sb = new StringBuilder("这是2022年7月25日8点半之后的请求,请求者name(入参):");
                        sb.append(config.getName());
                        log.info(sb.toString());
                    })
            );
        };
    }
    public static class Config{
        private String name;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
}

在gateway的启动类上进行注册

@Bean
    public MyPartGatewayFilterFactory myGatewayFilterFactory(){
        return new MyPartGatewayFilterFactory();
    }

对应的配置文件部分

        - id: my_route
          uri: http://127.0.0.1:8010
          filters:
            - name: MyPart
              args:
                name: yuan
          predicates:
#            - After=2017-01-20T17:42:47.789-07:00[America/Denver]
            - After=2022-07-25T08:30:00.003+08:00[Asia/Shanghai]

运行结果

访问//localhost:8000/user/test

8000是我的gateaway运行端口

在这里插入图片描述

到此这篇关于Java中的gateway自定义过滤器详解的文章就介绍到这了,更多相关gateway自定义过滤器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JDK12的新特性之teeing collectors

    JDK12的新特性之teeing collectors

    这篇文章主要介绍了JDK12的新特性之teeing collectors的相关资料,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • java中ssh2执行多条命令的四种方法

    java中ssh2执行多条命令的四种方法

    本文主要介绍了java中ssh2执行多条命令的四种方法,包括分号分隔、管道分隔、EOF块、脚本调用,可确保环境配置生效,提升操作效率,具有一定的参考价值,感兴趣的可以了解一下
    2025-09-09
  • JDBC中Fetchsize的实现

    JDBC中Fetchsize的实现

    fetchsize是指在执行数据库查询时,每次从数据库中获取的记录条数,它对内存使用和网络传输效率有重要影响,在MyBatis中,可以通过全局设置或语句级别设置fetchsize,来控制查询操作的内存使用和提升性能,合理的fetchsize设置能有效减少网络往返次数和防止内存溢出
    2024-09-09
  • Spring基于注解的缓存声明深入探究

    Spring基于注解的缓存声明深入探究

    spring boot对缓存支持非常灵活,我们可以使用默认的EhCache,也可以整合第三方的框架,只需配置即可,下面这篇文章主要给大家介绍了关于SpringBoot学习之基于注解缓存的相关资料,需要的朋友可以参考下
    2022-08-08
  • Java引用传递和值传递栈内存与堆内存的指向操作

    Java引用传递和值传递栈内存与堆内存的指向操作

    这篇文章主要介绍了Java引用传递和值传递栈内存与堆内存的指向操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java滑动窗口算法题目练习(附详细图文及代码)

    Java滑动窗口算法题目练习(附详细图文及代码)

    在数据处理和算法中,滑动窗口是一种常见的技术,用于解决一些数组或字符串相关的问题,这篇文章主要介绍了Java滑动窗口算法题目练习的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-10-10
  • java虚拟机学习高级篇

    java虚拟机学习高级篇

    在本篇文章里小编给大家整理了关于java虚拟机学习高级篇的相关内容,有兴趣的朋友们跟着学习参考下。
    2019-06-06
  • Java中var的作用局部变量类型推断关键字详解

    Java中var的作用局部变量类型推断关键字详解

    var是Java 10引入的局部变量类型推断关键字,简化变量声明语法,不改变强类型特性,编译时推断类型,使用规则严格,适用于局部变量且立即初始化,适用于复杂泛型、循环变量和临时局部变量,本文给大家介绍Java中var的作用局部变量类型推断关键字,感兴趣的朋友一起看看吧
    2025-11-11
  • java中PriorityBlockingQueue的入队知识点总结

    java中PriorityBlockingQueue的入队知识点总结

    在本篇文章里小编给大家整理一篇关于java中PriorityBlockingQueue的入队知识点总结内容,有需要的朋友们可以学习下。
    2021-01-01
  • Java过滤器Filter详解

    Java过滤器Filter详解

    这篇文章主要介绍了java过滤器中Filter,发送请求时,如果有不符合的信息将会被filter进行拦截,如果符合则会进行放行。如果感兴趣可以来学习一下
    2021-08-08

最新评论