全局过滤器

上一节学习的过滤器,网关提供了31种,但每一种过滤器的作用都是固定的。如果我们希望拦截请求,做自己的业务逻辑则没办法实现。

全局过滤器作用

全局过滤器的作用也是处理一切进入网关的请求和微服务响应,与GatewayFilter的作用一样。区别在于GatewayFilter通过配置定义,处理逻辑是固定的;而GlobalFilter的逻辑需要自己写代码实现。

定义方式是实现GlobalFilter接口。

public interface GlobalFilter {/***  处理当前请求,有必要的话通过{@link GatewayFilterChain}将请求交给下一个过滤器处理** @param exchange 请求上下文,里面可以获取Request、Response等信息* @param chain 用来把请求委托给下一个过滤器 * @return {@code Mono<Void>} 返回标示当前过滤器业务结束*/Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
}

在filter中编写自定义逻辑,可以实现下列功能:

  • 登录状态判断

  • 权限校验

  • 请求限流等

自定义全局过滤器

需求:定义全局过滤器,拦截请求,判断请求的参数是否满足下面条件:

  • 参数中是否有authorization,

  • authorization参数值是否为admin

如果同时满足则放行,否则拦截

实现:

在gateway中定义一个过滤器:

import org.springframework.cloud.gateway.filter.GatewayFilterChain;
import org.springframework.cloud.gateway.filter.GlobalFilter;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import reactor.core.publisher.Mono;@Order(-1)
@Component
public class AuthorizeFilter implements GlobalFilter {@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {// 1.获取请求参数MultiValueMap<String, String> params = exchange.getRequest().getQueryParams();// 2.获取authorization参数String auth = params.getFirst("authorization");// 3.校验if ("admin".equals(auth)) {// 放行return chain.filter(exchange);}// 4.拦截// 4.1.禁止访问,设置状态码exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);// 4.2.结束处理return exchange.getResponse().setComplete();}
}

Gateway网关-全局过滤器相关推荐

  1. java 配置全局过滤器,如何为Spring Cloud Gateway加上全局过滤器

    既然是一个网关.那么全局过滤器肯定是少不了的一个存在.像是鉴权.认证啥的不可能每个服务都做一次,一般都是在网关处就搞定了. Zuul他就有很强大的过滤器体系来给人使用. Gateway当然也不会差这么 ...

  2. Gateway自定义全局过滤器

    一.Gateway全局过滤器 1.全局过滤器(Global Filters)简介 Gateway过滤器在实现方式上,有两种过滤器: GatewayFilter(局部过滤器/网关过滤器): 需要通过 s ...

  3. GateWay 网关路由过滤器配置

    GatewayFilter 是网关中提供的一种过滤器,可以对进入网关的请求和微服务返回的响应做处理. Spring提供了31种不同的路由过滤器工厂. 官方文档:Spring Cloud Gateway ...

  4. Gateway网关---Filter过滤器

    官网关于过滤器的文档地址https://cloud.spring.io/spring-cloud-gateway/2.2.x/reference/html/#gatewayfilter-factori ...

  5. 服务网关(Gateway)自定义全局过滤器统一Token处理

    网关登录校验 在网关工程中添加全局过滤器 ​ import com.alibaba.fastjson.JSON; import com.xuecheng.commons.model.vo.AuthIn ...

  6. SpringCloud微服务架构之,Hystrix 熔断器,Gateway 网关

    Hystrix 概述 Hystix 是 Netflix 开源的一个延迟和容错库,用于隔离访问远程服务.第三方库,防止出现级联失败(雪崩). pom依耐 <!-- hystrix -->&l ...

  7. gateway网关服务的高级配置

    源码:学习demo: 关于学习的所有代码 目录: gateway网关的断言工厂 gateway网关的过滤器工厂 gateway网关的全局过滤器,即可以自定义业务代码的过滤器 一.gateway网关的断 ...

  8. Gateway网关-过滤器链执行顺序

    过滤器执行顺序 请求进入网关会碰到三类过滤器:当前路由的过滤器.DefaultFilter.GlobalFilter 请求路由后,会将当前路由过滤器和DefaultFilter.GlobalFilte ...

  9. SpringCloud Gateway 服务网关,过滤器

    SpringCloud Gateway 过滤器有 pre 和 post 两种方式,请求首先经过 pre 过滤器处理,成功后被转发到对应的服务,然后经过 post 过滤器处理,将结果返回客户端.这种机制 ...

最新文章

  1. spring入门(11)-spring与hibernate整合完成增删改查的操作(封装HibernateTemplate模版类对象)
  2. 怎么new一个指针_19. Go语言里的 make 和 new 有什么区别?
  3. 2013电大计算机应用基础试题及答案,[2017年电大]电大2013年计算机应用基础试题及答案[呕心沥血整理].doc...
  4. 祝贺!王春雨入职一个月晋升副教授
  5. 查找算法(一)顺序查找
  6. vscode设置go环境
  7. OpenCV读取多幅图片,读取系列图片,读取文件夹中指定图像类型的系列图片
  8. 将某表某列数据复制到另一张表的某列
  9. 红米 刷机 android7.1,有没有红米note3全网通的android7.1刷机包
  10. win7台式计算机型号怎么查,win7系统电脑查看主板型号的四种方法
  11. 学习笔记(01):3华为工程师 ,带你实战C++(2018版)-09面向对象的思想实战
  12. BUG Flink报Timeout of 60000ms expired before the position for partition could be determined
  13. 三种方式实现电脑端同时登陆多个微信
  14. 软件测试周刊(第07期):每个人都是天才
  15. PHPCMS二次开发教程
  16. 静态常量池、运行时常量池、字符串常量池
  17. struts2 运行原理 面试必考题
  18. 检测三维物体?一篇文章认识《双目立体视觉》
  19. 2021-2027全球与中国半电池太阳能电池板市场现状及未来发展趋势
  20. 4.Unity2D 横版 帧事件+攻击判定+冲砍挑飞+更真实的打击

热门文章

  1. JavaScript对象的创建之构造函数
  2. hadoop整合纪要
  3. Direct3D 开发之旅 3D 游戏基本概念的介绍2
  4. Git 提交规范-Java程序员收藏必备
  5. UOJ #590. 天天和树
  6. 安卓开发创建活动,布局,添加按钮,she使用Toast,设菜单,使菜单相关联等操作...
  7. 利用python去除红章
  8. 20145315 《Java程序设计》第五周学习总结
  9. 使用PHP发送邮件的两种方法
  10. Pocket PC 2003 SE设备仿真器网络设置