SpringCloud微服务中gateway网关的使用(四)——filter过滤器的使用
前言:filter过滤器是gateway网关的三大核心概念之一,最主要的功能就是对访问进行一个过滤功能,类似于serverlet中的过滤器,下面介绍一下框架中含有的过滤器配置以及如何自定义过滤器。一。框架中自带的过滤器配置这里主要是通过修改application.yml配置文件配置来配置过滤器,其配置方法与predicate断言的配置差不多,有兴趣的小伙伴可以看看我的另外一篇博文:SpringCl
前言:
filter过滤器是gateway网关的三大核心概念之一,最主要的功能就是对访问进行一个过滤功能,类似于serverlet中的过滤器,下面介绍一下框架中含有的过滤器配置以及如何自定义过滤器。
一。框架中自带的过滤器配置
这里主要是通过修改application.yml配置文件配置来配置过滤器,其配置方法与predicate断言的配置差不多,有兴趣的小伙伴可以看看我的另外一篇博文:SpringCloud微服务中gateway网关的使用(三)——predicates的九种常用配置方式
平时我们最常用的是自定义过滤器,所以这里就不做详细描述,官方文档中有详细实现配置,有兴趣的小伙伴可以访问官网查看:gate官方API文档
1.GatewayFilter Factories
2.Global Filters
二。自定义过滤器
自定义过滤器的实现方式最主要是实现GlobalFilter和Ordered这两个接口,其中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.控制台输出:
更多推荐
所有评论(0)