java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > gateway自定义过滤器

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

作者:小菜鸡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成功

控制台输出

在这里插入图片描述

局部过滤器

有两种方式:

局部过滤器实现

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自定义过滤器内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文