Spring Cloud Alibaba Gateway全局token过滤、局部过滤访问时间超过50ms日志提示
文章目录
- Spring Cloud Alibaba Gateway验证token
- 在前篇的基础上加入依赖
- 在filter包中创建tokenFilter
- Spring Cloud Alibaba Gateway局部过滤
- 1.继承AbstractGatewayFilterFactory
- 2.仿照AddRequestHeaderGatewayFilterFactory
Spring Cloud Alibaba Gateway验证token
基础搭建
前篇
在前篇的基础上加入依赖
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.18</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency>
在filter包中创建tokenFilter
@Component
@Slf4j
public class TokenFilter implements GlobalFilter, Ordered {@Value("${token.key}")private String tokenKey;private static final String TOKEN = "token";@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {//生成一个token
/* Map<String, Object> map = new HashMap<>();map.put("id", 100);map.put("nickName", "张三");map.put("tel", "10086");map.put(JWT.EXPIRES_AT, System.currentTimeMillis() + 2 * 24 * 6 * 6 * 1000);String token1 = JWTUtil.createToken(map, tokenKey.getBytes());*/List<String> strings = exchange.getRequest().getHeaders().get(TOKEN);ServerHttpResponse response = exchange.getResponse();if (ObjectUtil.isEmpty(strings)) {log.debug("token为空,不予通行");response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}String token = strings.get(0);boolean verify = false;try {verify = JWTUtil.verify(token, tokenKey.getBytes(StandardCharsets.UTF_8));} catch (Exception ex) {log.error("出现错误{}", ex.getMessage());ex.printStackTrace();}if (!verify) {log.error("token不对,不要投机取巧");response.setStatusCode(HttpStatus.UNAUTHORIZED);return response.setComplete();}JWTPayload payload = JWTUtil.parseToken(token).getPayload();log.info("通过,大大滴好!!");return chain.filter(exchange);}//配置第一顺位执行@Overridepublic int getOrder() {return 1;}
}
自行访问

Spring Cloud Alibaba Gateway局部过滤
1.继承AbstractGatewayFilterFactory
加入配置
spring.cloud.gateway.routes[0].filters[4] = LogTime=50
- 这里配置的LogTime 与 类名前面的对应
- AbstractNameValueGatewayFilterFactory可以仿照这个类写 进入ieda 两下shift
@Component
@Slf4j
public class LogTimeGatewayFilterFactory extends AbstractGatewayFilterFactory<LogTimeGatewayFilterFactory.Config> {private String TIMESPAN = "timeSpan";public LogTimeGatewayFilterFactory() {super(LogTimeGatewayFilterFactory.Config.class);}public List<String> shortcutFieldOrder() {return Arrays.asList(TIMESPAN);}@Overridepublic GatewayFilter apply(Config config) {return new GatewayFilter() {@Overridepublic Mono<Void> filter(ServerWebExchange exchange,GatewayFilterChain chain) {long start = System.currentTimeMillis();exchange.getAttributes().put("start", start);return chain.filter(exchange).then(Mono.fromRunnable(()->{long end = System.currentTimeMillis();long start1 = exchange.getAttribute("start");HttpRequest request = exchange.getRequest();URI uri = request.getURI();if(config.timeSpan > (end - start1)){log.info("uri伟{}不错!{}在50ms之内",uri,end - start1);}log.info("uri伟{}不行!太慢啦{}",uri,end - start1);}));}};}@Validated//启用参数验证似乎public static class Config{private int timeSpan;public int getTimeSpan() {return timeSpan;}public void setTimeSpan(int timeSpan) {this.timeSpan = timeSpan;}}}
2.仿照AddRequestHeaderGatewayFilterFactory
继承AbstractNameValueGatewayFilterFactory
@Component
@Slf4j
public class LogTime2GatewayFilterFactory extends AbstractNameValueGatewayFilterFactory{public LogTime2GatewayFilterFactory() {}public GatewayFilter apply(final AbstractNameValueGatewayFilterFactory.NameValueConfig config) {return new GatewayFilter() {@Overridepublic Mono<Void> filter(ServerWebExchange exchange,GatewayFilterChain chain) {long start = System.currentTimeMillis();exchange.getAttributes().put("start", start);return chain.filter(exchange).then(Mono.fromRunnable(()->{long end = System.currentTimeMillis();long start1 = exchange.getAttribute("start");HttpRequest request = exchange.getRequest();URI uri = request.getURI();if(Integer.parseInt(config.getValue()) > (end - start1)){log.info("logTime2 uri伟{}不错!{}在50ms之内",uri,end - start1);}log.info("logTime2 uri伟{}不行!太慢啦{}",uri,end - start1);}));}public String toString() {return GatewayToStringStyler.filterToStringCreator(LogTime2GatewayFilterFactory.this).append(config.getName(), config.getValue()).toString();}};}}
证明参数注入成功


相关文章:
Spring Cloud Alibaba Gateway全局token过滤、局部过滤访问时间超过50ms日志提示
文章目录 Spring Cloud Alibaba Gateway验证token在前篇的基础上加入依赖在filter包中创建tokenFilter Spring Cloud Alibaba Gateway局部过滤1.继承AbstractGatewayFilterFactory2.仿照AddRequestHeaderGatewayFilterFactory Spring Cloud Alibaba Gateway验证token 基础搭建…...
运算符 - Go语言从入门到实战
运算符 - Go语言从入门到实战 算术运算符 假设A变量等于10,B变量等于20。 运算符描述实例相加A B 输出结果 30-相减A - B 输出结果 -10*相乘A * B 输出结果 200/相除B / A 输出结果 2%求余B % A 输出结果 0⾃增A 输出结果 11–⾃减A-- 输出结果 9 特性…...
jupyterlab开发环境最佳构建方式
文章目录 背景jupyterlab环境构建运行虚拟环境构建以及kernel映射验证总结 背景 从jupyter notebook切换到了jupyter lab. 这里记录一下本地环境的最佳构建方式. jupyter lab 安装在jupyterlab-local的anaconda 虚拟环境中.建立多个其他虚拟环境安装各种python包实现环境隔离,…...
Qt_C++读写NFC标签Ntag支持windows国产linux操作系统
本示例使用的发卡器:Android Linux RFID读写器NFC发卡器WEB可编程NDEF文本/智能海报/-淘宝网 (taobao.com) ntag2标签存储结构说明 #include "mainwindow.h" #include "./ui_mainwindow.h" #include <QDebug> #include "QLibrary&…...
Web开发-基础知识扫盲
目录 Web 服务器Web 服务器例子 MVC架构Web 项目运行过程负载均衡和反向代理持久化Java对象JPA Web 服务器 Web 服务器是一种计算机程序,它通过 HTTP 协议接收和响应客户端发送的请求。Web 服务器将 HTML、CSS、JavaScript 和其他资源文件发送给客户端,…...
SpringMVC 学习(四)RestFul 风格
5. RestFul 风格 5.1 简介 概念 Restful就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。 功能 资源:互联网所有的事物都可以被抽象为…...
消息中间件相关知识
1、概述 消息队列已经逐渐成为企业IT系统内部通信的核心手段。它具有低耦合、可靠投递、广播、流量控制、最终一致性等一系列功能,成为异步RPC的主要手段之一。当今市面上有很多主流的消息中间件,如老牌的ActiveMQ、RabbitMQ,炙手可热的Kafka…...
JackJson多态
JsonTypeInfo 处理多态、序列化对象类型_赵丙双的博客-CSDN博客 JsonTypeInfo实现jackson的多态解析_MonkeyKing_sunyuhua的博客-CSDN博客 Java Jackson JsonTypeInfo 多态类型处理 - 简书 JsonTypeInfo 逻辑名称 JsonSubTypes、JsonTypeName_赵丙双的博客-CSDN博客...
孟晚舟最新发声!华为吹响人工智能的号角,发布“全面智能化”战略部署
原创 | 文 BFT机器人 1、华为孟晚舟新发声,华为发布“全面智能化”战略 上周三(9月30号)上午,华为全联接大会2023正式在上海举行,作为华为副董事长、轮值董事长、CFO的孟晚舟代表华为再次发声!在演讲上&am…...
open62541开发:添加sqlite3 历史数据库
历史数据库在OPCUA 应用中十分重要,例如OPCUA 网关和OPCUA 汇聚服务器中都需要历史数据库功能。但是open62541 协议栈中仅包含了基于内存的历史数据库,在实际应用中是不够的。本博文讨论open62541 中添加sqlite3 为基础的历史数据库若干问题。 借鉴 Gi…...
美国零售电商平台Target,值得入驻吗?如何入驻?
Target 是美国最大的零售商之一,在品牌出海为大势所趋的背景下,它在北美电商中的地位节节攀升。Target 商店在众多垂直领域提供各种价格实惠的自有品牌,吸引越来越多的跨境商家入驻,如美妆、家居、鞋服、日用百货等,随…...
docker freeswitch mysql驱动相关
1. docker环境 的freeswitch要连mysql数据库 2. centos版本:7.9 3. mysql版本:mysql8.0 4. odbc版本:适用以下命令查询 rpm -qa | grep -E "unixODBC|mysql-connector-odbc" mysql-connector-odbc-5.2.5-8.el7.x86_64 unixODB…...
Chrome iframe 跨域失败
原因: Chrome 稳定版禁用 document.domain setter 解决方案(4种): 1 使用低版本Chrome 缺点:无法保证用户浏览器版本。 2 浏览器设置: 浏览器地址栏输入 chrome://flags/#origin-agent-cluster-default然…...
【Vue】vue-cli一站式搭建SPA项目
🎉🎉欢迎来到我的CSDN主页!🎉🎉 🏅我是Java方文山,一个在CSDN分享笔记的博主。📚📚 🌟推荐给大家我的专栏《Vue快速入门》。🎯🎯 &…...
CPP代码检查工具
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录前言CPP代码检查工具工具一:GCC编译器工具二:Cppcheck工具三:gbd调试器工具四:SonarCube嵌入式平台工具内存泄漏检查工具linux的cpu占用情况前言 认…...
在SpringBoot中利用Redis实现互斥锁
在SpringBoot中利用Redis实现互斥锁 基本知识 前提条件,有一个能够在Springboot中使用Redis的项目,或者能够直接开也行 为什么要实现互斥锁:当我们利用Redis存储热点数据时,突然就过期失效或者被删除了,导致大量请求同…...
vue3+eleement plus日历选择季度
<template><div class"el-quarter-wrap"><el-popover width"280" v-model"visible"><template #reference><el-input v-model"quarterDate" placeholder"请选择季度" clearable :prefix-icon&qu…...
实现动态业务规则的方法(Java)
实现动态业务规则的方法(Java) 企业信息化系统核心在于业务领域的概念模型及于此基础上复杂多变的业务规则,实现中通常抽象规则的接口方法,使用继承或策略等设计模式实现不同的业务规则的实现。领域的概念模型在特定领域是稳定的…...
leetcodeTOP100(26)两数相加
给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 …...
performance_schema
插桩名称的最左边部分表示插桩类型,其余部分从左到右依次表示到特定的子系统 mysql> select * from performance_schema.setup_instruments where documentation is not null limit 5,5\G; *************************** 1. row ***************************NAME:…...
Z-Image-Turbo-rinaiqiao-huiyewunv快速上手:Streamlit交互界面操作详解
Z-Image-Turbo-rinaiqiao-huiyewunv快速上手:Streamlit交互界面操作详解 1. 工具简介 Z-Image Turbo (辉夜大小姐-日奈娇)是一款基于Tongyi-MAI Z-Image底座模型开发的专属二次元人物绘图工具。它通过注入辉夜大小姐(日奈娇)微调权重,提供了高度优化的…...
造相-Z-Image实战手册:基于Z-Image的AIGC版权合规提示词生成规范
造相-Z-Image实战手册:基于Z-Image的AIGC版权合规提示词生成规范 1. 项目概述与核心价值 造相-Z-Image是一款专为RTX 4090显卡优化的本地化文生图系统,基于通义千问官方Z-Image模型构建。这个项目最大的特点是将强大的AI图像生成能力带到了个人电脑上&…...
命名实体识别工具:从技术突破到业务价值重构
命名实体识别工具:从技术突破到业务价值重构 【免费下载链接】W2NER 项目地址: https://gitcode.com/gh_mirrors/w2/W2NER 1 解锁NER效率新范式 传统NER为何在长文本中频频失效? 当面对医疗病例中"高血压引发的左心室肥厚导致劳力性呼吸困…...
MFShield库深度解析:非阻塞状态机与Arduino多功能扩展板工程实践
1. MFShield 多功能扩展板库技术解析与工程实践指南MFShield 是一款面向 Arduino 平台的轻量级多功能扩展板(Multi-Function Shield)专用驱动库,专为市面常见的低成本 44 按键矩阵 4 位共阴数码管 电位器 有源蜂鸣器 4 路 LED 组合扩展板…...
Ruoyi-Vue3实战:10分钟搞定学生管理系统CRUD(附完整SQL)
Ruoyi-Vue3学生管理系统实战:从零到部署的完整指南 在当今快速迭代的开发环境中,选择高效的技术栈至关重要。Ruoyi-Vue3作为基于Spring Boot和Vue3的企业级开发框架,以其模块化设计和丰富的功能组件,成为快速构建管理系统的首选方…...
久鼎私域测流模式系统(现成方案)
久鼎私域测流模式系统是一套专注于私域流量监测与分析的解决方案,适用于企业精细化运营私域用户池。其核心功能包括流量来源追踪、用户行为分析、转化效果评估等,支持多平台数据整合。核心功能模块流量监测 实时监控私域流量入口(如小程序、公…...
Jimeng LoRA企业落地案例:设计公司LoRA训练-测试-选型一体化流程
Jimeng LoRA企业落地案例:设计公司LoRA训练-测试-选型一体化流程 1. 项目简介 今天给大家分享一个特别实用的企业级AI应用案例——如何为设计公司搭建一套完整的LoRA模型训练、测试和选型流程。这个项目基于Jimeng(即梦)系列LoRA模型&#…...
RevokeMsgPatcher:微信QQ防撤回终极指南,轻松保留重要消息
RevokeMsgPatcher:微信QQ防撤回终极指南,轻松保留重要消息 【免费下载链接】RevokeMsgPatcher :trollface: A hex editor for WeChat/QQ/TIM - PC版微信/QQ/TIM防撤回补丁(我已经看到了,撤回也没用了) 项目地址: htt…...
UniApp应用变现实战:用uni-ad激励视频提升用户留存与收益的配置心得
UniApp应用变现实战:用uni-ad激励视频提升用户留存与收益的配置心得 在移动应用生态中,广告变现与用户体验的平衡一直是开发者面临的难题。激励视频作为一种用户主动参与的广告形式,不仅能为开发者带来收益,还能通过奖励机制提升用…...
保姆级教程:在绿联NAS上用Docker Compose一键部署PaddleOCR,打造本地私有化OCR服务
绿联NASDocker Compose极简部署PaddleOCR:零命令行打造私有文字识别服务 家里堆积如山的合同发票需要电子化?团队内部敏感文档不敢用云端OCR?绿联NAS用户现在可以抛开复杂命令,用Docker Compose三分钟搭建企业级文字识别服务。本文…...
