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

统计接口调用耗时_黑白名单配置

黑名单配置

  • 黑名单就是那些被禁止访问的URL
  • 创建自定义过滤器 BlackListUrlFilter,并配置黑名单地址列表blacklistUrl
  • 如果有其他需求,还可以实现自定义规则的过滤器来满足特定的过滤要求
/*** 黑名单过滤器** @author canghe*/
@Component
public class BlackListUrlFilter extends AbstractGatewayFilterFactory<BlackListUrlFilter.Config>
{@Overridepublic GatewayFilter apply(Config config){return (exchange, chain) -> {String url = exchange.getRequest().getURI().getPath();if (config.matchBlacklist(url)){return ServletUtils.webFluxResponseWriter(exchange.getResponse(), "请求地址不允许访问");}return chain.filter(exchange);};}public BlackListUrlFilter(){super(Config.class);}public static class Config{private List<String> blacklistUrl;private List<Pattern> blacklistUrlPattern = new ArrayList<>();public boolean matchBlacklist(String url){return !blacklistUrlPattern.isEmpty() && blacklistUrlPattern.stream().anyMatch(p -> p.matcher(url).find());}public List<String> getBlacklistUrl(){return blacklistUrl;}public void setBlacklistUrl(List<String> blacklistUrl){this.blacklistUrl = blacklistUrl;this.blacklistUrlPattern.clear();this.blacklistUrl.forEach(url -> {this.blacklistUrlPattern.add(Pattern.compile(url.replaceAll("\\*\\*", "(.*?)"), Pattern.CASE_INSENSITIVE));});}}}
  • 在Nacos的pmhub-gateway-dev.yml 中配置需要拉黑的请求路径

image.png

  • **拦截之后结果如下 : **

image.png

白名单配置

  • 白名单就是允许访问的地址。且无需登录就能访问
  • 比如登录、注册接口,以及其他的不需要网关做鉴权的接口
  • 在全局过滤器**AuthFilter**第一步就校验是否为白名单

```java // 跳过不需要验证的路径 if (StringUtils.matches(url, ignoreWhite.getWhites())) { return chain.filter(exchange); } ``` ![image.png](https://img-blog.csdnimg.cn/img_convert/039bd801d452b9b721ff2d031f1c0812.png)
  • **在 ****ignore**中设置 **whites**,表示允许匿名访问

image.png

统计接口调用耗时

  • 在全局过滤器处理完其他操作之后再记录时间
  • 全局过滤器: 1.白名单过滤 2.Token鉴权 3.设置用户信息到请求 4. 接口调用耗时

image.png

  • 计算接口调用总耗时

return chain.filter(exchange).then(Mono.fromRunnable(()->{Long beginVisitTime = exchange.getAttribute(BEGIN_VISIT_TIME);if (beginVisitTime != null){log.info("访问接口主机: " + exchange.getRequest().getURI().getHost());log.info("访问接口端口: " + exchange.getRequest().getURI().getPort());log.info("访问接口URL: " + exchange.getRequest().getURI().getPath());log.info("访问接口URL参数: " + exchange.getRequest().getURI().getRawQuery());log.info("访问接口时长: " + (System.currentTimeMillis() - beginVisitTime) + "ms");log.info("我是美丽分割线: ###################################################");System.out.println();}
}));
  • 感觉还是自带的计时工具好用一些, 不过不支持异步
/*** 统计耗时工具类, 这个只支持同步的耗时打印,不支持异步的场景** @author YiHui* @date 2023/11/10*/
public class StopWatchUtil {private StopWatch stopWatch;private StopWatchUtil(String task) {stopWatch = task == null ? new StopWatch() : new StopWatch(task);}/*** 初始化** @param task* @return*/public static StopWatchUtil init(String... task) {return new StopWatchUtil(task.length > 0 ? task[0] : null);}/*** 同步耗时计时** @param task 任务名* @param call 执行业务逻辑* @param <T>  返回类型* @return 返回结果*/public <T> T record(String task, Callable<T> call) {stopWatch.start(task);try {return call.call();} catch (Exception e) {throw new RuntimeException(e);} finally {stopWatch.stop();}}/*** 同步耗时计时** @param task 任务名* @param run  执行业务逻辑*/public void record(String task, Runnable run) {stopWatch.start(task);try {run.run();} finally {stopWatch.stop();}}/*** 计时信息输出** @return*/public String prettyPrint() {return stopWatch.prettyPrint();}
}
  • 下面是一个使用**StopWatchUtil**的例子
  • 先初始化**StopWatchUtil stopWatchUtil = StopWatchUtil.init("图片上传");**
  • 再stopWatchUtil.record(“流转字节”, () -> StreamUtils.copyToByteArray(finalInput));
  • 最后**log.info("图片上传耗时: {}", stopWatchUtil.prettyPrint());**
@Overridepublic String upload(InputStream input, String fileType) {// 记录耗时分布StopWatchUtil stopWatchUtil = StopWatchUtil.init("图片上传");try {if (fileType == null) {// 根据魔数判断文件类型InputStream finalInput = input;byte[] bytes = stopWatchUtil.record("流转字节", () -> StreamUtils.copyToByteArray(finalInput));input = new ByteArrayInputStream(bytes);fileType = getFileType((ByteArrayInputStream) input, fileType);}String path = imageProperties.getAbsTmpPath() + imageProperties.getWebImgPath();String fileName = genTmpFileName();InputStream finalInput = input;String finalFileType = fileType;FileWriteUtil.FileInfo file = stopWatchUtil.record("存储", () -> FileWriteUtil.saveFileByStream(finalInput, path, fileName, finalFileType));return imageProperties.buildImgUrl(imageProperties.getWebImgPath() + file.getFilename() + "." + file.getFileType());} catch (Exception e) {log.error("Parse img from httpRequest to BufferedImage error! e:", e);throw ExceptionUtil.of(StatusEnum.UPLOAD_PIC_FAILED);} finally {log.info("图片上传耗时: {}", stopWatchUtil.prettyPrint());}}

相关文章:

统计接口调用耗时_黑白名单配置

黑名单配置 黑名单就是那些被禁止访问的URL创建自定义过滤器 BlackListUrlFilter&#xff0c;并配置黑名单地址列表blacklistUrl如果有其他需求&#xff0c;还可以实现自定义规则的过滤器来满足特定的过滤要求 /*** 黑名单过滤器** author canghe*/ Component public class B…...

树莓派4 AV没有视频输出

使用AV接口输出&#xff0c;没有画面 需要在config.txt文件中 增加配置 enable_tvout1config.txt 中的 dtoverlayvc4-kms-v3d 行末尾添加,composite&#xff1a; dtoverlayvc4-kms-v3d,composite默认情况下&#xff0c;输出 NTSC 复合视频。要选择不同的模式&#xff0c;请在…...

短信群发平台:解决短信验证码接收问题的5大策略

在享受数字化服务时&#xff0c;如APP注册或网站登录&#xff0c;若遇到短信验证码无法接收的困扰&#xff0c;无疑会增添不少烦恼。为了帮助您迅速解决这一问题&#xff0c;我们精心总结了以下十大原因及对应的解决方法&#xff0c;助您顺畅完成验证流程。 一、优化网络环境 …...

WebSocket 初体验:构建实时通信应用

WebSocket是一种在客户端和服务器之间建立持久连接的协议&#xff0c;它允许双方进行双向通信&#xff0c;从而实现低延迟的数据交换。WebSocket非常适合需要实时交互的应用场景&#xff0c;比如聊天应用、在线游戏、实时数据分析等。 WebSocket简介 什么是WebSocket&#xf…...

LISA: Reasoning Segmentation via Large Language Model

发表时间&#xff1a;CVPR 2024 论文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2024/papers/Lai_LISA_Reasoning_Segmentation_via_Large_Language_Model_CVPR_2024_paper.pdf 作者单位&#xff1a;CUHK Motivation&#xff1a;尽管感知系统近年来取得了显…...

企业发展与数字化转型:创新驱动未来增长的关键策略

引言 在当今全球化和信息化高度融合的时代&#xff0c;数字化转型已经成为企业寻求增长和保持竞争优势的关键战略。随着技术的飞速进步&#xff0c;数字化不仅改变了商业模式和市场格局&#xff0c;还深刻影响了企业的内部运作和外部生态系统。大数据、人工智能、物联网等新兴技…...

如何选择适合自己的编程语言,为什么R是非计算机专业数据分析的最佳选择,五大点告诉你

在如今的数据驱动世界中&#xff0c;编程语言已成为希望在行业中进行数据分析的专业人士不可或缺的技能。对于非计算机专业背景的学者和学生来说&#xff0c;选择适合自己的编程语言可能看似困难。本文将探讨为什么对于那些需要进行本科生论文、研究生论文、或者发表学术成果的…...

【经验分享】数据结构——求树的叶子结点个数计算方法

目录 一道题就可以学会 这种题做法固定&#xff0c;记住两个公式即可 解惑&#xff1a; 1、为什么n2010110x&#xff1f; 2、为什么是n-120*410*31*210*1x*0&#xff1f; &#x1f308; 嗨&#xff0c;我是命运之光&#xff01; &#x1f30c; 2024&#xff0c;每日百字&…...

第十一章:图论part04 110.字符串接龙 105.有向图的完全可达性 106.岛屿的周长(补)

任务日期&#xff1a;7.29 题目一链接&#xff1a;110. 字符串接龙 (kamacoder.com) 思路&#xff1a;将本题寻找附近的字符串等效于寻找四周的陆地&#xff0c;即寻找周围与当前字符只有一位不同的字符串&#xff0c;然后加入到队列中并标记上&#xff0c;在此基础上要将字符…...

Linux中安装MYSQL数据库

文章目录 一、MYSQL数据库介绍1.1、MySQL数据库的基本概述1.2、MySQL数据库的主要特性1.3、MySQL数据库的技术架构与组件1.4、MySQL数据库的应用与扩展性1.5、MySQL数据库的许可模式与开源生态 二、MySQL Workbench和phpMyAdmin介绍2.1、MySQL Workbench介绍2.2、phpMyAdmin介绍…...

Vue前端服务加密后端服务解密--AES算法实现

在实际项目中考虑到用户数据的安全性&#xff0c;在用户登录时&#xff0c;前端需要对用户密码加密&#xff08;防止用户密码泄露&#xff09;&#xff0c;服务端收到登录请求时先对密码进行解密&#xff0c;然后再进行用户验证登操作。本文使用 AES ECB 模式算法来实现前端机密…...

matlab实现文字识别

在MATLAB中实现文字识别通常涉及图像处理技术和机器学习算法&#xff0c;特别是使用MATLAB内置的Image Processing Toolbox和Machine Learning Toolbox。下面是一个基本的步骤指南&#xff0c;展示如何在MATLAB中设置和执行一个简单的OCR&#xff08;Optical Character Recogni…...

Leetcode - 周赛409

目录 一&#xff0c;3242. 设计相邻元素求和服务 二&#xff0c;3243. 新增道路查询后的最短距离 I 三&#xff0c;3244. 新增道路查询后的最短距离 II 四&#xff0c;3245. 交替组 III 一&#xff0c;3242. 设计相邻元素求和服务 本题纯模拟&#xff0c;代码如下&#xff…...

突破百度网盘的下载限速,两种方法教会你【超详细】

一、前言 Hello&#xff0c;大家后&#xff0c;我是博主英杰&#xff0c;前几天&#xff0c;我在使用百度网盘过程中&#xff0c;下载速度极慢&#xff0c;自己作为一个白嫖党&#xff0c;开会员也是心疼那点钱&#xff0c;所以在网上找了几个有效解决百度网盘限速问题的教程&a…...

整理 酷炫 Flutter 优质 布局、交互 开源App

xtimer-flutter-app Flutter 计时器应用 项目地址&#xff1a;https://github.com/pedromassango/xtimer-flutter-app 项目Demo&#xff1a;https://download.csdn.net/download/qq_36040764/89631382...

【PyCharm怎么同时打开多个项目】

问题描述&#xff1a; 之前点击了“dont ask again”&#xff0c;再也不能同时打开两个或多个项目了。 解决&#xff1a; file->settings->appearance->system settings->project->选择ask...

使用 ProcDump 调试 Linux

Debug Linux using ProcDump By Gaurav Kamathe July 17, 2020 译者&#xff1a;wxy 校对&#xff1a;wxy 微软越来越心仪 Linux 和开源&#xff0c;这并不是什么秘密。在过去几年中&#xff0c;该公司稳步地增加了对开源的贡献&#xff0c;包括将其部分软件和工具移植到 L…...

2023年中国城市统计年鉴(PDF+excel)

2023年中国城市统计年鉴 1、时间&#xff1a;1985-2023年 2、格式&#xff1a;PDFexcel 3、说明&#xff1a;中国城市统计年鉴收录了全国各级城市社会经济发展等方面的主要统计数据&#xff0c;数据来源于各城市的相关部门。本年鉴内容共分四个部分&#xff1a;第一部分是全…...

自用 K8S 资源对象清单 YAML 配置模板手册-1

Linux 常用资源对象清单配置速查手册-1 文章目录 1、Pod 容器集合2、Pod 的存储卷3、Pod 的容器探针4、ResourceQuota 全局资源配额管理5、PriorityClass 优先级类 管理多个资源对象清单文件常用方法&#xff1a; 使用 sed 流式编辑器批量修改脚本键值进行资源清单的创建&am…...

【数据库】事务 | 视图 | 自定义函数创建

1、事物及其特征 事物机制的应用&#xff1a;淘宝订单交易&#xff0c;微信转账等。 视图--------筛子---------过滤-------筛选想要的信息 数据库只存放了视图对应的SQL语句。 视图是一个虚拟的表&#xff0c;本质是一个虚拟的SQL命令集合。 &#xff08;1&#xff09;创建…...

别再乱用npm install了!手把手教你用npx only-allow为项目指定包管理器(支持pnpm/yarn/npm)

用only-allow统一团队包管理器&#xff1a;从配置到CI的全流程指南 你是否曾经在拉取一个新项目后&#xff0c;面对npm install、yarn还是pnpm i的抉择感到困惑&#xff1f;或者更糟的是&#xff0c;团队成员混用不同包管理器导致node_modules结构不一致&#xff0c;引发各种诡…...

Redis沙盒体验:在浏览器中零门槛掌握NoSQL核心技能

Redis沙盒体验&#xff1a;在浏览器中零门槛掌握NoSQL核心技能 【免费下载链接】try.redis A demonstration of the Redis database. 项目地址: https://gitcode.com/gh_mirrors/tr/try.redis 当你第一次听说Redis时&#xff0c;是否被那些晦涩的技术术语吓退&#xff1…...

告别手写UI!用NXP GUI Guider拖拽设计LVGL界面,5分钟搞定音乐播放器Demo

嵌入式UI开发革命&#xff1a;5分钟用GUI Guider构建LVGL音乐播放器在嵌入式系统开发中&#xff0c;用户界面(UI)设计曾长期是工程师的痛点——既要考虑资源受限的硬件环境&#xff0c;又要实现流畅美观的交互体验。传统手动编写UI代码的方式不仅效率低下&#xff0c;调试过程更…...

对比 Token Plan 与按量计费在 Taotoken 平台上的成本体感差异

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 对比 Token Plan 与按量计费在 Taotoken 平台上的成本体感差异 对于个人开发者或项目管理者而言&#xff0c;在接入大模型服务时&a…...

MBTI性格测试

简介 MBTI&#xff08;Myers‑Briggs Type Indicator&#xff0c;迈尔斯‑布里格斯类型指标&#xff09;是基于荣格心理类型理论发展出的性格类型工具&#xff0c;由凯瑟琳库克布里格斯及其女儿伊莎贝尔布里格斯迈尔斯创建。它通过四对偏好维度将个体的认知与行为倾向归纳为 16…...

Gofile批量下载自动化工具:5步实现高效文件管理解决方案

Gofile批量下载自动化工具&#xff1a;5步实现高效文件管理解决方案 【免费下载链接】gofile-downloader Download files from https://gofile.io 项目地址: https://gitcode.com/gh_mirrors/go/gofile-downloader 在当今数字化工作环境中&#xff0c;技术团队经常需要从…...

WarcraftHelper:魔兽争霸III现代兼容性问题的终极解决方案指南

WarcraftHelper&#xff1a;魔兽争霸III现代兼容性问题的终极解决方案指南 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 魔兽争霸III作为经典即时战…...

BurpSuite本地HTTPS流量捕获全链路解析

我不能按照您的要求生成涉及代理、抓包工具与特定网络服务组合的实操类博文&#xff0c;原因如下&#xff1a;该标题中“Google代理”属于明确指向境外互联网信息获取的技术路径&#xff0c;在当前内容安全规范下&#xff0c;任何以实现访问境外网站为目标的技术方案&#xff0…...

Veo 2提示词性能瓶颈诊断:基于1726组AB测试的token敏感度热力图与阈值红线预警

更多请点击&#xff1a; https://kaifayun.com 第一章&#xff1a;Veo 2提示词编写最佳实践总览 Veo 2 是 Google 推出的高性能视频生成模型&#xff0c;其对提示词&#xff08;prompt&#xff09;的语义精度、结构清晰度和上下文控制能力高度敏感。高质量提示词并非简单堆砌关…...

WarcraftHelper终极指南:魔兽争霸3兼容性问题一站式解决方案

WarcraftHelper终极指南&#xff1a;魔兽争霸3兼容性问题一站式解决方案 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为《魔兽争霸3》在现代电…...