前言:

filter过滤器是gateway网关的三大核心概念之一,最主要的功能就是对访问进行一个过滤功能,类似于serverlet中的过滤器,下面介绍一下框架中含有的过滤器配置以及如何自定义过滤器。

一。框架中自带的过滤器配置

这里主要是通过修改application.yml配置文件配置来配置过滤器,其配置方法与predicate断言的配置差不多,有兴趣的小伙伴可以看看我的另外一篇博文:SpringCloud微服务中gateway网关的使用(三)——predicates的九种常用配置方式

平时我们最常用的是自定义过滤器,所以这里就不做详细描述,官方文档中有详细实现配置,有兴趣的小伙伴可以访问官网查看:gate官方API文档

1.GatewayFilter Factories

在这里插入图片描述

2.Global Filters

在这里插入图片描述

二。自定义过滤器

自定义过滤器的实现方式最主要是实现GlobalFilterOrdered这两个接口,其中GlobalFilter接口用来编写过滤逻辑,Ordered用来过滤器加载的顺序,值越小,代表其优先级别越高

具体实现过程如下:

1.编写全局过滤器实现类MyLogGatewayFilter :

/**
 * 全局自定义过滤器
 *
 * @author zks
 * @version 1.0
 * @create 2020/11/02
 */
@Component
public class MyLogGatewayFilter implements GlobalFilter, Ordered {


    /**
     * 执行过滤逻辑
     * @param exchange
     * @param chain
     * @return
     */
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
        System.out.println("进入过滤器   "+new Date());

        ServerHttpRequest request = exchange.getRequest();
        //得到请求参数
        String name = request.getQueryParams().getFirst("name");
        //执行过滤逻辑
        if (name == null || "".equals(name)) {
            System.err.println("name为null,非法用户");
            //定义拦截返回状态码
            exchange.getResponse().setStatusCode(HttpStatus.NOT_ACCEPTABLE);
            return exchange.getResponse().setComplete();
        }
        // 放行
        return chain.filter(exchange);
    }

    /**
     * 过滤器加载的顺序 越小,优先级别越高
     *
     * @return
     */
    @Override
    public int getOrder() {
        return 0;
    }
}

需要注意的是实现类需要加上@Component,否则会无效。

2.依次启动服务,带上参数name并赋值,访问http://localhost:9527/provider/getInfo?name=1,访问成功:

在这里插入图片描述

3.带上参数name不赋值,访问http://localhost:9527/provider/getInfo?name,访问失败请求被拦截:

在这里插入图片描述

4.控制台输出:

在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐