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

Spring Cloud --- Gateway自定义条件过滤器

Gateway自定义条件过滤器

介绍

条件过滤器对单个路由生效。

新建类名XXX需要以GatewayFilterFactory结尾,并继承AbstractGatewayFilterFactory类

@Component //标注不可忘
public class MyGatewayFilterFactory extends AbstractGatewayFilterFactory<MyGatewayFilterFactory.Config>{

}

新建XXXGatewayFilterFactory.Config内部类

@Component
public class MyGatewayFilterFactory extends AbstractGatewayFilterFactory<MyGatewayFilterFactory.Config> {
    public static class Config {
        @Setter @Getter
        private String status;
    }
}

重写apply方法

@Component
public class MyGatewayFilterFactory extends AbstractGatewayFilterFactory<MyGatewayFilterFactory.Config> {
    @Override
    public GatewayFilter apply(MyGatewayFilterFactory.Config config) {
        return new GatewayFilter() {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
                ServerHttpRequest request =  exchange.getRequest();
                System.out.println("进入自定义网关过滤器MyGatewayFilterFactory,status===="+config.getStatus());
                if(request.getQueryParams().containsKey("atguigu")) {
                    return chain.filter(exchange);
                }else {
                    exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST);
                    return exchange.getResponse().setComplete();
                }
            }
        };
    }

    public static class Config {
        @Setter @Getter
        private String status;
    }
}

重写shortcutFieldOrder

@Override
public List<String> shortcutFieldOrder() {
    List<String> list = new ArrayList<String>();
    list.add("status");
    return list;
}

空参构造方法,内部调用super

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

完整代码

@Component
public class MyGatewayFilterFactory extends AbstractGatewayFilterFactory<MyGatewayFilterFactory.Config> {
    public MyGatewayFilterFactory() {
        super(MyGatewayFilterFactory.Config.class);
    }


    @Override
    public GatewayFilter apply(MyGatewayFilterFactory.Config config) {
        return new GatewayFilter()
        {
            @Override
            public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain)
            {
                ServerHttpRequest request = exchange.getRequest();
                System.out.println("进入了自定义网关过滤器MyGatewayFilterFactory,status:"+config.getStatus());
                if(request.getQueryParams().containsKey("atguigu")){
                    return chain.filter(exchange);
                }else{
                    exchange.getResponse().setStatusCode(HttpStatus.BAD_REQUEST);
                    return exchange.getResponse().setComplete();
                }
            }
        };
    }

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

    public static class Config {
        @Getter@Setter
        private String status;//设定一个状态值/标志位,它等于多少,匹配和才可以访问
    }
}

yml添加配置

- My=atguigu

spring:
  application:
    name: cloud-gateway #以微服务注册进consul或nacos服务列表内
  cloud:
    gateway:
      routes:
        - id: pay_routh3 #pay_routh3
          uri: lb://cloud-payment-service                #匹配后提供服务的路由地址
          predicates:
            - Path=/pay/gateway/filter/**              # 断言,路径相匹配的进行路由,默认正确地址
          filters:
            - My=atguigu

http://www.kler.cn/news/358949.html

相关文章:

  • unity的一个bug
  • 三元组表矩阵运算
  • 力扣56~60题
  • 利用Docker搭建一套Mycat2+MySQL8一主一从、读写分离的最简单集群(保姆教程)
  • cocos Creator + fairyGUI 快速入门
  • 错误:‘AT_CHECK’ was not declared in this scope; did you mean ‘DCHECK’?
  • 【计算机网络 - 基础问题】每日 3 题(四十九)
  • Redis Geo 数据类型解析:基于 ZSET 的高效地理位置管理0708
  • 双十一购物节有哪些好物值得入手?2024双十一好物清单合集分享
  • 边缘计算网关助力煤矿安全远程监控系统
  • HTTPS证书生成、验签-、证书链
  • k8s-NFS系统配置
  • FastGPT本地开发 之 通过Navicat管理MongoDB、PostgreSQL数据库
  • (BIOS)Windows系统下GSensor坐标映射
  • javaWeb项目-Springboot+vue-校园论坛系统功能介绍
  • uniapp使用html2canvas时,页面内的image元素模糊
  • springboot 整合 快手 移动应用 授权 发布视频 小黄车
  • 行业分析---自动驾驶人才流动及从业思考
  • 在线获取iOS获取公钥、SHA-1 、MD5进行提交备案
  • Jmeter学习深入