接口请求控制工具
接口请求控制工具
- 功能说明
- 代理转发
- 安全控制
- 访问控制
- 错误处理
- 配置管理
- 日志管理
- 技术栈
- 快速开始
- 环境要求
- 配置说明
- 启动服务
- 工具源码
功能说明
代理转发
- 支持多路由配置
- 支持静态资源代理
- 灵活的路由规则配置
- 支持请求转发和响应处理
- 支持负载均衡
- 支持多目标服务器配置
- 提供多种负载均衡策略:
- 轮询(Round Robin)
- 随机(Random)
- 加权轮询(Weighted Round Robin)
- 加权随机(Weighted Random)
- 最小连接数(Least Connections)
- 支持服务器权重配置
- 动态连接数跟踪
安全控制
-
XSS 防护:
- 自动检测和拦截 XSS 攻击
- 可配置的 XSS 过滤规则
- 按路由配置是否启用
-
CSRF 防护:
- 基于 Token 的 CSRF 防护
- 支持安全方法豁免(GET、HEAD等)
- 按路由配置是否启用
-
文件上传控制:
- 可配置的文件类型白名单
- 可配置的文件大小限制
- 文件名安全检查
- 按路由配置是否启用
访问控制
-
IP 黑白名单:
- 支持 IP 白名单配置
- 支持 IP 黑名单配置
- 动态的 IP 封禁机制
-
请求频率限制:
- 基于令牌桶算法
- 可配置的请求速率
- 按路由独立限制
错误处理
- 自定义错误页面:
- 502:目标服务器无响应
- CSRF:CSRF 验证失败
- static-404:静态资源未找到
- 403:IP 被临时封禁
- 404:路由未找到
- 429:请求频率超限
- 500:服务器内部错误
- 友好的错误提示
- 详细的错误日志记录
配置管理
-
路由配置:
{"routes": {"/api": {"targetUrls": ["http://localhost:8080","http://localhost:8081"],"loadBalance": {"strategy": "WEIGHTED_ROUND_ROBIN","weights": {"http://localhost:8080": 3,"http://localhost:8081": 2}},"rateLimit": 10,"isStatic": false,"security": {"enableXssFilter": true,"enableCsrfFilter": true,"enableFileUploadFilter": true,"fileUpload": {"maxFileSize": 10485760,"allowedFileTypes": ["image/jpeg","image/png","image/gif","application/pdf","application/msword","application/vnd.openxmlformats-officedocument.wordprocessingml.document"]}}}} }
-
IP 白名单配置:
["127.0.0.1", "192.168.1.100"]
-
IP 黑名单配置:
{"192.168.1.200": {"banTime": "2024-03-10T10:00:00","reason": "频繁访问"} }
日志管理
- 代理请求日志
- 错误日志
- 安全事件日志
- 按日期自动归档
- 可配置的日志级别
技术栈
- Spring Boot 2.3.4
- Thymeleaf
- Lombok
- Commons Pool2
快速开始
环境要求
- JDK 8+
- Maven 3.6+
配置说明
- 配置文件位置:
源码/config/
- 主要配置文件:
- proxy-routes.json:代理路由配置
- targetUrls:目标服务器地址列表
- loadBalance:负载均衡配置
- strategy:负载均衡策略
- weights:服务器权重配置(可选)
- rateLimit:请求频率限制
- isStatic:是否为静态资源
- security:安全配置
- ip-whitelist.json:IP白名单配置
- ip-blacklist.json:IP黑名单配置
- proxy-routes.json:代理路由配置
启动服务
-
编译项目:
mvn clean package
-
运行服务:
java -jar target/SpringBoot-1.0-SNAPSHOT-execute.jar
-
默认端口:10020
工具源码
接口请求控制工具
相关文章:
接口请求控制工具
接口请求控制工具 功能说明代理转发安全控制访问控制错误处理配置管理日志管理 技术栈快速开始环境要求配置说明启动服务 工具源码 功能说明 代理转发 支持多路由配置支持静态资源代理灵活的路由规则配置支持请求转发和响应处理支持负载均衡 支持多目标服务器配置提供多种负载…...
Git 实践笔记
这里写自定义目录标题 一、将当前改动追加到某次commit上二、git 强制修改分支位置 一、将当前改动追加到某次commit上 stash工作区中的当前改动 git stash假设需要修改的commit是 f744c32,将HEAD移动到需要改动的commit的父提交上 git rebase f744c32^ --interact…...
记一个Unity中Humanoid中骨骼与武器脱离的问题
在Untiy中,有时人物的Humanoid的骨骼对应上了,但是套用动画的时候武器等节点有时会脱离,这是因为Humanoid只包含了人物骨骼,不包括其他额外的骨骼,因此如果想要武器节点也跟随,需要在Humanoid中也绑定骨骼设…...
Python asyncio
一些Pre关键概念 asyncio 本质上还是单进程单线程的Python程序; 建立event_loop 概念,上面event_loop 可以理解为大脑,下面是若干个可执行的Task; Task 没有控制权,没有办法控制event_loop 执行某个Task,只…...
【前端分享】JavaScript异步编程详解!
JavaScript 的异步编程是其核心特性之一,主要用于处理非阻塞操作(如网络请求、文件读写、定时任务等)。由于 JavaScript 是单线程的,异步机制可以避免代码阻塞,提高性能和用户体验。以下是 JavaScript 异步编程的核心概…...
深度学习基础--CNN经典网络之InceptionV1研究与复现(pytorch)
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 前言 InceptionV1是提出并行卷积结构,是CNN的经典网络之一;本次任务是探究InceptionV1结构并进行复现实验;欢迎收藏 关注…...
用 Vue 3 + D3.js 实现动态数据流图
文章目录 一、项目背景与功能概览二、项目准备与依赖安装2.1 安装 Vue 3 项目2.2 安装 D3.js2.3 项目结构 三、实现动态数据流图3.1 创建 DataFlowChart 组件3.2 动态更新数据流3.2.1 动态更新边和节点位置3.2.2 动画效果 四、节点拖拽与编辑功能实现4.1 添加节点拖拽功能4.2 编…...
46、Spring Boot 详细讲义(三)
五、Spring Boot 与 Web 开发 1. 简介 Spring Boot 是基于 Spring Framework 开发的一个框架,旨在简化配置,快速构建应用。它内嵌 Tomcat 等 servlet 容器,支持 RESTful API 开发,处理静态资源,以及集成视图层技术如 Thymeleaf 和 Freemarker。 2. Spring MVC 集成 Sp…...
热门面试题第15天|最大二叉树 合并二叉树 验证二叉搜索树 二叉搜索树中的搜索
654.最大二叉树 力扣题目地址(opens new window) 给定一个不含重复元素的整数数组。一个以此数组构建的最大二叉树定义如下: 二叉树的根是数组中的最大元素。左子树是通过数组中最大值左边部分构造出的最大二叉树。右子树是通过数组中最大值右边部分构造出的最大…...
为了避免unboundLocalError和为什么X的值一直不变呢?
## 1.为了避免unboundLocalError 发生unboundLocalError! def generate_integer(level):if level 1:X randint(1,9)return X这里出错的原因在于,一旦if 后面的条件没有成立,然后X根本没出生,然后你去使用它,这是有…...
Express中间件(Middleware)详解:从零开始掌握(1)
1. 中间件是什么? 想象中间件就像一个"加工流水线",请求(Request)从进入服务器到返回响应(Response)的过程中,会经过一个个"工作站"进行处理。 简单定义:中间件是能够访问请求对象(req)、响应对象(res)和下…...
Linux升级gcc版本
目录 1.安装 scl 工具集 2.安装新版本gcc 3.启用新版本 gcc 4.将启动新版本gcc指令写入配置文件 本文主要讲述如何去升级 linux 操作系统下的 gcc 编译器版本。 1.安装 scl 工具集 sudo yum install centos-release-scl scl-utils-build 由于作者已经安装过,…...
【概念】什么是UI(User interface)什么是UX(User experience)?
1. 软件生命周期管理 (Software Life Cycle Management) 解释: 中文: 软件生命周期管理是指从软件规划、设计、开发、测试、部署到后续维护甚至退役的整个过程。English: Software Life Cycle Management refers to the systematic process of plannin…...
【GIT】git pull --rebase 功能解析
1. git pull 命令基础 git pull 是一个常用的 Git 命令,用于从远程仓库获取最新的更改,并尝试将这些更改合并到当前分支中。这通常涉及两个步骤:首先,git fetch 命令从远程仓库下载最新的更改;然后,git me…...
难度偏低,25西电人工智能学院821、833、834考研录取情况
1、人工智能学院各个方向 2、人工智能学院近三年复试分数线对比 学长、学姐分析 由表可看出: 1、智能院25年院线相对于24年院线 全部专业下降比较多,其中控制科学与工程下降20分,计算机科学与技术下降20分,计算机技术[专硕]下降…...
L2-051 满树的遍历
L2-051 满树的遍历 - 团体程序设计天梯赛-练习集 (pintia.cn) 题解 数据结构选择 为了表示树的结构,我们可以使用邻接表。邻接表是一种常用的图和树的表示方法,它能够高效地存储每个节点的子节点信息。在本题中,我们可以使用一个数组 g&am…...
2025年电子电气与新材料国际学术会议
重要信息 官网:www.iceenm.org(点击了解详情) 时间:2025年4月25-27日 地点:中国-杭州 部分介绍 征稿主题 电子电气 新材料 电力电子器件和系统设计 可再生能源与电网集成技术 下一代半导体…...
数字人:打破次元壁,从娱乐舞台迈向教育新课堂(4/10)
摘要:数字人正从娱乐领域的璀璨明星跨界到教育领域的智慧导师,展现出无限潜力。从虚拟偶像、影视游戏到直播短视频,数字人在娱乐产业中大放异彩,创造巨大商业价值。在教育领域,数字人助力个性化学习、互动课堂和虚拟实…...
【Hyperlane 】轻松实现大文件分块上传!
【Hyperlane 】轻松实现大文件分块上传! 痛点直击:大文件上传不再是难题 在云存储、音视频处理、文件协作等场景中,大文件上传常面临中断重试成本高、内存占用大、网络不稳定等挑战。传统方案要么复杂笨重,要么性能瓶颈明显。 现…...
【深入浅出 Git】:从入门到精通
这篇文章介绍下版本控制器。 【深入浅出 Git】:从入门到精通 Git是什么Git的安装Git的基本操作建立本地仓库配置本地仓库认识工作区、暂存区、版本库的概念添加文件添加文件到暂存区提交文件到版本库提交文件演示 理解.git目录中的文件HEAD指针与暂存区objects对象 …...
APP动态交互原型实例|墨刀变量控制+条件判断教程
引言 不同行业的产品经理在绘制原型图时,拥有不同的呈现方式。对于第三方软件技术服务公司的产品经理来说,高保真动态交互原型不仅可以在开发前验证交互逻辑,还能为甲方客户带来更直观、真实的体验。 本文第三部分将分享一个实战案例&#…...
第二节:React 基础篇-受控组件 vs 非受控组件
一、场景题:设计一个实时搜索输入框,说明选择依据 受控组件 vs 非受控组件 核心区别 特征受控组件非受控组件数据管理由React状态(state)控制通过DOM元素(ref)直接访问更新时机每次输入触发onChange提交…...
电脑的usb端口电压会大于开发板需要的电压吗
电脑的USB端口电压通常不会大于开发板所需的电压,以下是详细解释: 1. USB端口电压标准 根据USB规范,USB接口的标称输出电压为5V。实际测量时,USB接口的输出电压会略有偏差,通常在4.75V到5.25V之间。USB 2.0和USB 3.0…...
软件界面设计:打造用户喜爱的交互体验
在数字化飞速发展的当下,软件已渗透进生活的各个角落,从日常使用的社交、购物软件,到专业领域的办公、设计软件,其重要性不言而喻。而软件界面作为用户与软件交互的桥梁,直接决定了用户对软件的第一印象与使用体验。出…...
7、linux基础操作2
一、linux调度 1、crontab [选项] 1.1、了解 定时任务调度:指每隔指定的时间,执行特定的命令或程序。 基本语法:crontab [选项] 常用选项: e: 编辑定时任务l:查询定时任务r:删除当前用户的所有定时任务…...
大数据管理专业想求职数据分析岗,如何提升面试通过率?
从技能到策略,解锁高薪岗位的六大核心逻辑 在数字化浪潮席卷全球的今天,数据分析岗位的竞争愈发激烈。对于大数据管理专业的学生而言,如何从众多求职者中脱颖而出?本文结合行业趋势与实战经验,提炼出提升面试通过率的…...
移动端六大语言速记:第15部分 - 其他方面
移动端六大语言速记:第15部分 - 其他方面 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言的其他重要特性,帮助开发者全面了解各语言的独特优势和应用场景。 15.1 语言特有功能 各语言特有功能对比: 语言特有功能描述Java注解(Annotat…...
3.1.3.4 Spring Boot使用使用Listener组件
在Spring Boot中,使用Listener组件可以监听和响应应用中的各种事件。首先,创建自定义事件类CustomEvent,继承自ApplicationEvent。然后,创建事件监听器CustomEventListener,使用EventListener注解标记监听方法。接下来…...
基于关键字定位的自动化PDF合同拆分
需求背景: 问题描述: 我有一份包含多份合同的PDF文件,需要将这些合同分开并进行解析。 传统方法(如以固定页数作为分割点)不够灵活,无法满足需求。 现有方法的不足: 网上找到的工具大多依赖手动…...
ssh连接远程Host key verification failed.
问题描述 在对已部署的项目进行维护过程中,遇到的一个小问题,记录一下。 SSH连接云服务器ssh xxx云服务器IP地址,提示: The authenticity of host xxxxxx (xx.xxx.123.321) cant be established. ECDSA key fingerprint is SHA…...
Matlab 汽车ABS的bangbang控制和模糊PID控制
1、内容简介 Matlab 197-汽车ABS的bangbang控制和模糊PID控制 可以交流、咨询、答疑 2、内容说明 略 摘要:本文旨在设计一种利用模糊控制理论优化的pid控制器,控制abs系统,达到对滑移率最佳控制范围的要求 ,所提出的方案采用级联…...
kotlin的takeIf使用
takeIf用于判断指定对象是否满足条件,满足就返回该对象自身,不满足返回null。因为可以返回对象自身,所以可以用作链式调用,以简化代码,又因takeIf可能返回空,所以常常和let结合使用,示例如下&am…...
MySQL 进阶 - 2 ( 9000 字详解)
一: SQL 优化 1.1 插入数据 1.1.1 批量插入 单条 INSERT 语句执行时,需经历语法解析、事务提交、磁盘 I/O 等多个步骤。批量插入将多条数据合并为一条 SQL,能够减少网络通信和事务开销。 -- 单条插入(低效) INSERT…...
Devops之GitOps:什么是Gitops,以及它有什么优势
GitOps 定义 GitOps 是一种基于版本控制系统(如 Git)的运维实践,将 Git 作为基础设施和应用程序的唯一事实来源。通过声明式配置,系统自动同步 Git 仓库中的期望状态到实际运行环境,实现持续交付和自动化运维。其核心…...
VSCode和Fitten Code
提示:本文为学习记录,若有错误,请联系作者。 文章目录 一、离线安装二、在线安装总结 一、离线安装 访问 Open VSX 镜像站 打开 https://open-vsx.org,搜索 Fitten Code 点击“从VSIX安装”,选择下载的VSIX即可。安装…...
在 Visual Studio Code 中安装 Python 环境
在 Visual Studio Code 中安装 Python 环境 1. 安装 Visual Studio Code 首先,下载并安装 Visual Studio Code(VS Code): 下载链接:Visual Studio Code 官网安装步骤:按照下载页面的说明进行安装。 2. …...
[问题帖] vscode 重启远程终端
原理 有的时候,在vscode 远程ssh连接到服务器的时候,可能遇到需要重启终端才能生效的配置,比如add group的时候,而此时无论你是关闭vscode终端重启,还是reload窗口都是没用的。 因为不管你本地是否连接了远程的vscode服…...
PostgreSQL技术大讲堂 - 第86讲:数据安全之--data_checksums天使与魔鬼
PostgreSQL技术大讲堂 - 第86讲,主题:数据安全之--data_checksums天使与魔鬼 1、data_checksums特性 2、避开DML规则,嫁接非法数据并合法化 3、避开约束规则,嫁接非法数据到表中 4、避开数据检查,读取坏块中的数据…...
No staged files match any configured task
我在拉取一个新项目的时候,进行 git commit 的时候就出现了这个问题 然后我现在来说一下我出现这个问题的解决思路 我们点击 “显示命令输出” 我们把第二行的错误 subject may not be empty [subject-empty] 复制搜索一下 这是其他人写的 博客:subje…...
Sqlite3 查看db文件
以下是一些 SQLite3 常用命令的整理,涵盖数据库操作、表管理、数据查询等场景: 1. 数据库连接与退出 打开/创建数据库:sqlite3 filename.db # 打开或创建数据库文件退出 SQLite3 命令行:.exit # 退出 .quit …...
【leetcode hot 100 152】乘积最大子数组
错误解法:db[i]表示以i结尾的最大的非空连续,动态规划:dp[i] Math.max(nums[i], nums[i] * dp[i - 1]); class Solution {public int maxProduct(int[] nums) {int n nums.length;int[] dp new int[n]; // db[i]表示以i结尾的最大的非空连…...
微信小程序实时日志记录-接口监控
文章目录 微信小程序如何抓取日志,分析用户异常问题可查看用户具体页面行为操作web体验分析 腾讯小程序平台,提供了非常好用的,。 web分析工…...
【C++刷题】二叉树基础OJ题
📝前言说明: 本专栏主要记录本人的基础算法学习以及刷题记录,使用语言为C。 每道题我会给出LeetCode上的题号(如果有题号),题目,以及最后通过的代码。没有题号的题目大多来自牛客网。对于题目的…...
CSS高级技巧
目录 一、精灵图 二、字体图标 三、CSS制作三角形 四、CSS用户界面样式 1、鼠标样式 cursor 2、轮廓线 outline 3、防止拖拽文本域 resize 五、vertical-align 属性 六、溢出的文字省略号显示 1、单行文本溢出显示省略号 2、多行文本溢出显示省略号 七、常见布局技…...
70. 爬楼梯:动态规划
题目来源 70. 爬楼梯 - 力扣(LeetCode) 题目描述 思路 1.观察每个较少的台阶的方法 2.dp[0,1,2,3,5,8,13]---->dp[i]表示爬上第i阶的方法数 3.观察dp:dp[i]dp[i-1]dp[i-2]; 代码 public int climbStairs(int n) {int[] dp new int…...
使用治疗前MR图像预测脑膜瘤Ki-67的多模态深度学习模型
大家好,我是带我去滑雪! 脑膜瘤是一种常见的脑部肿瘤,Ki-67作为肿瘤细胞增殖的标志物,对于评估肿瘤的生物学行为、预后以及治疗方案的制定具有至关重要的作用。然而,传统的Ki-67检测依赖于组织学切片和免疫组化染色等方…...
Skynet.socket 函数族使用详解
目录 Skynet.socket 函数族使用详解核心功能分类一、TCP 连接管理1. 监听端口2. 建立连接3. 关闭连接 二、数据读写操作1. 阻塞式读取2. 写入数据2.1 socket.write(fd, data) 的返回值2.2 示例代码2.3 关键注意事项2.4 与其他函数的区别2.5 底层原理2.6 总结 三、UDP 处理1. 创…...
Python signal 模块详解:优雅处理异步事件
诸神缄默不语-个人技术博文与视频目录 在 Linux 或类 Unix 系统中,信号(Signal)是一种用于进程间通信的机制,允许操作系统或其他进程向目标进程发送异步通知。 Python 的 signal 模块提供了对这些信号的访问和处理能力࿰…...
[LeetCode 189] 轮转数组
[LeetCode 189] 轮转数组 题目描述: 给定一个整数数组 nums,将数组中的元素向右轮转 k 个位置,其中 k 是非负数。 示例 1: 输入: nums [1,2,3,4,5,6,7], k 3 输出: [5,6,7,1,2,3,4] 示例 2: 输入:nums [-1,-100,3,99], k 2 …...
【Qt】qDebug() << “中文测试“; 乱码问题
环境 Qt Creator版本:4.7.1 编译器:MSVC2015_32bit 解法一 在.pro文件中添加 msvc:QMAKE_CXXFLAGS -execution-charset:utf-8注意: 1、需要清理项目,并重新qmake,然后构建。 测试项目下载:https://do…...