# http-governance
**Repository Path**: net_yc60/http-governance
## Basic Information
- **Project Name**: http-governance
- **Description**: 动态HTTP治理平台 - 运维可视推送版
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-06-07
- **Last Updated**: 2026-06-14
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 智盾 - HTTP智能治理平台
> 🛡️ 一站式 HTTP 请求智能治理平台,让你的接口更稳定、更安全、更可控。
---
## 系统简介
**智盾** 是一个企业级的 HTTP 请求智能治理平台,为您的微服务架构提供全方位的请求治理能力。
### 一句话概括
**一个管理后台,一套 Starter 依赖,让您的业务项目自动获得 12 种强大的 HTTP 治理能力。
### 核心价值
| 能力 | 说明 | 解决的问题 |
|------|------|-----------|
| 🚦 **流量管控** | 限流、熔断、重试 | 防止服务雪崩,保护下游系统 |
| 🛡️ **安全加固** | 签名验证、报文加解密 | 防止数据泄露和篡改 |
| 📊 **可观测性** | 接口日志、慢接口检测、数据脱敏 | 快速定位问题,保护敏感信息 |
| 🔄 **灵活路由** | 动态路由、灰度发布 | 平滑升级、流量切分 |
| 🧪 **混沌工程** | 故障注入、Mock 响应 | 提前发现系统脆弱点 |
| 🎯 **运维监控** | 实时监控、事件追溯 | 生产问题快速排查 |
### 快速预览
启动服务后,您将获得:
```
浏览器访问:http://localhost
├── 仪表盘:系统总览(项目数、规则数、拦截器统计)
├── 规则管理:创建和配置治理规则
├── 项目管理:注册业务项目
├── 拦截器管理:查看 12 种内置拦截器
├── 配置推送:将规则推送到业务项目
└── 运维监控:接口日志、慢接口、限流/熔断/重试事件
```
---
## 一、快速开始(5 分钟上手)
### 1. 环境准备
确保您的系统已安装:
- **JDK 21** 或更高版本
- **Maven 3.6+**
- **Docker** 和 **Docker Compose**
### 2. 一键启动
```bash
# 1. 进入项目根目录
cd http-governance
# 2. 打包项目
mvn clean package -DskipTests
# 3. 启动所有服务
docker compose up -d
```
### 3. 访问系统
服务启动成功后,打开浏览器访问:
| 地址 | 说明 |
|------|------|
| **http://localhost** | **管理后台首页**(推荐) |
| http://localhost:8080/doc.html | API 文档页面 |
### 4. 服务端口说明
| 服务 | 端口 | 说明 |
|------|------|------|
| 前端管理页面 | 80 | Web 控制台 |
| Admin 后台 API | 8080 | 后端服务 |
| MySQL 数据库 | 3306 | 数据存储 |
---
## 二、完整使用指南(图文教程)
### 使用流程总览
使用 **智盾** 治理您的业务项目 HTTP 请求,只需 **5 步**:
```
┌─────────────────────────────────────────────────────────────┐
│ 完整使用流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 第一步:创建治理规则 │
│ ↓ │
│ 第二步:配置拦截器(限流/熔断/重试/日志等) │
│ ↓ │
│ 第三步:注册业务项目 │
│ ↓ │
│ 第四步:推送配置到业务项目 │
│ ↓ │
│ 第五步:查看运维监控(接口日志、事件追溯) │
│ │
└─────────────────────────────────────────────────────────────┘
```
---
### 第一步:创建治理规则
**规则** 是治理的核心,定义了"哪些请求需要被治理"。
#### 操作步骤:
1. 打开浏览器访问 **http://localhost**
2. 点击左侧菜单「**规则管理**」
3. 点击右上角「**新建规则**」按钮
4. 填写规则信息:
| 字段 | 说明 | 示例 |
|------|------|------|
| 规则名称 | 给规则起个名字 | 用户接口限流 |
| 匹配模式 | 如何匹配请求 URL | 前缀匹配 / 域名匹配 / 正则匹配 |
| 匹配值 | 具体的匹配条件 | `https://api.example.com/user` |
| 优先级 | 多规则时的匹配顺序 | 100(越大越优先) |
| 状态 | 启用/禁用 | 启用 |
5. 点击「**保存**」
#### 匹配模式说明:
| 模式 | 说明 | 示例 |
|------|------|------|
| 前缀匹配 | URL 以该值开头即匹配 | `https://api.example.com/user` 会匹配 `/user/list`、`/user/1` |
| 域名匹配 | URL 的域名等于该值即匹配 | `example.com` |
| 正则匹配 | URL 满足正则表达式即匹配 | `https://api\.example\.com/\d+` |
---
### 第二步:配置拦截器
创建规则后,需要配置该规则触发时执行哪些拦截器。
#### 操作步骤:
1. 在规则列表中,找到刚创建的规则
2. 点击「**配置拦截器**」按钮
3. 在弹窗中点击「**添加拦截器**」
4. 从下拉框选择要添加的拦截器类型
5. 在「**配置参数**(不同拦截器参数不同)
6. 点击「**确定**」添加
7. 可以通过**拖拽**调整拦截器的执行顺序(从上到下执行)
8. 点击「**保存**」
#### 12 种内置拦截器一览:
| 分类 | 拦截器名称 | 功能说明 |
|------|-----------|----------|
| 🚦 流量管控 | 请求限流 | 基于 QPS 的接口限流控制 |
| 🚦 流量管控 | 熔断降级 | 错误率超过阈值时熔断,保护下游 |
| 🚦 流量管控 | 自动重试 | 请求失败时自动重试 |
| 🛡️ 安全加密 | 加签验签 | 请求签名生成与验证 |
| 🛡️ 安全加密 | 报文加解密 | 请求体加密、响应体解密 |
| 📊 可观测性 | 接口日志 | 记录请求/响应详细信息 |
| 📊 可观测性 | 数据脱敏 | 敏感字段自动脱敏 |
| 📊 可观测性 | 慢接口检测 | 检测超过阈值的慢请求 |
| 🔄 灵活路由 | 动态路由 | 动态切换请求目标域名 |
| 🔄 灵活路由 | 灰度发布 | 按比例/指定用户路由到灰度环境 |
| 🧪 混沌工程 | 故障注入 | 模拟延迟、错误、超时等故障 |
| 🧪 混沌工程 | Mock 响应 | 直接返回预设响应 |
#### 常用拦截器配置示例:
**示例 1:请求限流**
限制用户接口 QPS 为 100,超过时返回 429:
```json
{
"qps": 100,
"periodSeconds": 1,
"blockEnabled": true,
"blockStatusCode": 429,
"blockBody": "{\"code\":429,\"message\":\"请求过于频繁,请稍后重试\"}"
}
```
**示例 2:熔断降级**
错误率超过 50% 时熔断,等待 30 秒后恢复:
```json
{
"failureThreshold": 50,
"waitDuration": 30,
"permittedCalls": 3,
"fallbackEnabled": true,
"fallbackStatusCode": 503,
"fallbackBody": "{\"code\":503,\"message\":\"服务暂时不可用\"}"
}
```
**示例 3:自动重试**
失败后自动重试 3 次,每次间隔 1 秒:
```json
{
"maxAttempts": 3,
"backoff": 1000,
"fallbackEnabled": true
}
```
**示例 4:接口日志**
记录所有请求和响应:
```json
{
"logRequest": true,
"logResponse": true,
"logHeaders": true,
"maxBodyLength": 2048
}
```
**示例 5:慢接口检测**
超过 3 秒的请求记录为慢接口:
```json
{
"thresholdMs": 3000,
"warnOnSlow": true
}
```
---
### 第三步:注册业务项目
需要将您的业务项目注册到管理平台,以便推送配置。
#### 操作步骤:
1. 点击左侧菜单「**项目管理**」
2. 点击「**新建项目**」按钮
3. 填写项目信息:
| 字段 | 说明 | 示例 |
|------|------|------|
| 项目编码 | 项目唯一标识(英文) | order-service |
| 项目名称 | 项目中文名称 | 订单服务 |
| 客户端类型 | 业务项目使用的 HTTP 客户端 | RestTemplate / RestClient / WebClient |
| 服务 IP | 业务项目部署的 IP | 192.168.1.100 |
| 服务端口 | 业务项目的端口 | 8080 |
4. 点击「**保存**」
---
### 第四步:推送配置
将规则和拦截器配置推送到业务项目。
#### 操作步骤:
1. 点击左侧菜单「**配置推送**」
2. 在下拉框中选择要推送的项目
3. 点击「**推送配置**」按钮
4. 推送成功后,业务项目会自动应用最新配置
> 💡 也可以点击「**推送到所有项目**」一次性推送给所有已注册的项目
---
### 第五步:业务项目集成(引入依赖)
业务项目需要引入对应的 Starter 依赖,才能接收并应用治理规则。
#### 1. 添加依赖
在业务项目的 `pom.xml` 中添加:
**使用 RestTemplate:
```xml
com.governance
governance-starter-template
1.0.0
```
**使用 RestClient:
```xml
com.governance
governance-starter-restclient
1.0.0
```
**使用 WebClient:
```xml
com.governance
governance-starter-webclient
1.0.0
```
#### 2. 启用治理
在启动类添加注解:
```java
@SpringBootApplication
@EnableHttpGovernanceTemplate // RestTemplate
// 或 @EnableHttpGovernanceRestClient
// 或 @EnableHttpGovernanceWebClient
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
}
```
#### 3. 配置项目信息
在 `application.yml` 中配置:
```yaml
governance:
project-code: order-service # 必须与管理平台注册的项目编码一致
admin-url: http://localhost:8080 # 管理平台地址
metrics:
enabled: true # 启用运维监控数据上报
interval: 5000 # 上报间隔(毫秒)
```
#### 4. 使用(无需修改代码)
**RestTemplate 示例:
```java
@RestController
public class DemoController {
@Autowired
private RestTemplate restTemplate; // 自动注入治理版
@GetMapping("/test")
public String callUserService() {
// 自动应用规则匹配和拦截器链
String result = restTemplate.getForObject(
"https://api.example.com/user/1",
String.class
);
return result;
}
}
```
**RestClient 示例:
```java
@RestController
public class DemoController {
@Autowired
private RestClient restClient; // 自动注入治理版
@GetMapping("/test")
public String callUserService() {
return restClient.get()
.uri("https://api.example.com/user/1")
.retrieve()
.body(String.class);
}
}
```
**WebClient 示例:
```java
@RestController
public class DemoController {
@Autowired
private WebClient webClient; // 自动注入治理版
@GetMapping("/test")
public Mono callUserService() {
return webClient.get()
.uri("https://api.example.com/user/1")
.retrieve()
.bodyToMono(String.class);
}
}
```
完成!您的业务项目的 HTTP 请求现在会自动应用您配置的所有治理规则!
---
### 第六步:查看运维监控
业务项目运行后,可以在管理平台查看运维监控数据。
#### 查看接口日志
接口日志记录了所有经过治理的 HTTP 请求,可用于:
- 排查程序问题
- 分析请求耗时
- 查看请求/响应内容
#### 查看慢接口
慢接口检测会记录响应时间超过阈值的接口,可用于:
- 识别性能瓶颈
- 优化慢接口
- 预防业务影响
#### 查看限流/熔断/重试事件
这些事件记录了治理动作的触发情况:
| 事件类型 | 说明 |
|-----------|------|
| 限流事件 | 哪些接口被限流了,触发了多少次 |
| 熔断事件 | 哪些接口被熔断了,熔断器状态 |
| 重试事件 | 哪些接口触发了重试,最终是否成功 |
---
## 三、外放 API 接口文档
### 1. 项目管理接口
**基础路径:`/api/project`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/page` | 分页查询项目列表 |
| GET | `/list` | 查询所有项目 |
| GET | `/{id}` | 根据 ID 查询项目详情 |
| POST | `/` | 新增项目 |
| PUT | `/` | 更新项目 |
| DELETE | `/{id}` | 删除项目 |
**新增项目请求示例:
```http
POST /api/project
Content-Type: application/json
{
"projectCode": "order-service",
"projectName": "订单服务",
"clientType": "TEMPLATE",
"serviceIp": "192.168.1.100",
"servicePort": 8080
}
```
**clientType 可选值:
- `TEMPLATE` - RestTemplate
- `RESTCLIENT` - RestClient
- `WEBCLIENT` - WebClient
---
### 2. 治理规则管理接口
**基础路径:`/api/rule`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/page` | 分页查询规则列表 |
| GET | `/list` | 查询所有规则 |
| GET | `/{id}` | 查询规则详情(含拦截器配置)
| POST | `/` | 新增规则 |
| PUT | `/` | 更新规则 |
| DELETE | `/{id}` | 删除规则(级联删除拦截器配置)
| POST | `/{id}/status` | 启用/禁用规则 |
| GET | `/{id}/interceptors` | 查询规则的拦截器配置 |
| POST | `/{id}/interceptors` | 保存规则的拦截器配置 |
| POST | `/{id}/interceptors/batch` | 批量保存拦截器配置 |
**新增规则请求示例:
```http
POST /api/rule
Content-Type: application/json
{
"ruleName": "用户接口限流",
"matchType": "PREFIX",
"matchValue": "https://api.example.com/user",
"priority": 100,
"status": 1
}
```
**配置规则拦截器(批量保存):
```http
POST /api/rule/1/interceptors/batch
Content-Type: application/json
[
{
"interceptorCode": "rate_limit",
"paramJson": {
"qps": 100,
"periodSeconds": 1
}
},
{
"interceptorCode": "api_log",
"paramJson": {
"logRequest": true,
"logResponse": true
}
}
]
```
---
### 3. 拦截器元数据接口
**基础路径:`/api/interceptor`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/list` | 查询所有拦截器元数据 |
| GET | `/group` | 按分类分组查询 |
| GET | `/{id}` | 根据 ID 查询 |
| GET | `/code/{code}` | 根据编码查询 |
**按分类分组查询响应示例:
```json
{
"流量管控": [
{
"interceptorCode": "rate_limit",
"interceptorName": "请求限流",
"category": "流量管控",
"description": "基于 QPS 的接口限流控制"
}
]
}
```
---
### 4. 配置推送接口
**基础路径:`/api/push`
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/project/{projectId}` | 向指定项目推送 |
| POST | `/all` | 向所有项目推送 |
| POST | `/batch` | 批量推送 |
| GET | `/history` | 获取推送历史记录 |
---
### 5. 运维监控查询接口
**基础路径:`/api/monitor`
| 方法 | 路径 | 说明 |
|------|------|------|
| GET | `/overview` | 获取运营统计总览 |
| GET | `/api-log/page` | 分页查询接口日志 |
| GET | `/api-log/{id}` | 查询接口日志详情 |
| GET | `/slow-api/page` | 分页查询慢接口列表 |
| GET | `/rate-limit/page` | 分页查询限流事件 |
| GET | `/circuit-breaker/page` | 分页查询熔断事件 |
| GET | `/retry/page` | 分页查询重试事件 |
**统计总览响应示例:
```json
{
"apiLogCount": 156,
"slowApiCount": 12,
"rateLimitCount": 3,
"circuitBreakerCount": 0,
"retryCount": 8
}
```
---
### 6. 运维监控数据上报接口(业务项目调用)
**基础路径:`/api/metrics`
| 方法 | 路径 | 说明 |
|------|------|------|
| POST | `/api-log` | 上报接口日志 |
| POST | `/slow-api` | 上报慢接口 |
| POST | `/rate-limit` | 上报限流事件 |
| POST | `/circuit-breaker` | 上报熔断事件 |
| POST | `/retry` | 上报重试事件 |
---
## 四、技术架构说明
### 整体架构:
```
┌─────────────────────────────────────────────────────────────┐
│ Admin 管控后台(Spring Boot 3 + JDK 21) │
│ │
│ REST API(Knife4j OpenAPI 3) │
│ ├── /api/project/* 项目管理 │
│ ├── /api/rule/* 规则管理 │
│ ├── /api/interceptor/* 拦截器元数据 │
│ ├── /api/push/* 配置推送 │
│ ├── /api/monitor/* 运维监控查询 │
│ └── /api/metrics/* 运维监控数据上报 │
│ │
│ 定时任务(TimingPushTask)每小时全量推送 │
│ │
│ 数据层(MyBatis-Plus + MySQL 8.0) │
└──────────────────────────┬───────────────────────────────┘
│ HTTP POST(配置推送)
▼
┌─────────────────────────────────────────────────────────────┐
│ 业务项目(引入 Starter) │
│ │
│ 配置接收接口(自动注册) │
│ POST /api/governance/config/push │
│ ↓ │
│ RuleCacheManager(内存缓存) │
│ ↓ │
│ HTTP 客户端拦截 │
│ ├── RestTemplate: ClientHttpRequestInterceptor │
│ ├── RestClient: ClientHttpRequestInterceptor │
│ └── WebClient: ExchangeFilterFunction │
│ ↓ │
│ 内置拦截器链(12个) │
│ ├── 流量管控: 限流、熔断、重试(Resilience4j) │
│ ├── 安全加密: 签名、加密(JDK Crypto) │
│ ├── 观测监控: 日志、脱敏、慢接口 │
│ ├── 路由灰度: 动态路由、灰度发布 │
│ └── 混沌工程: 故障注入、Mock 降级 │
└─────────────────────────────────────────────────────────────┘
```
### 技术栈
#### 后端技术栈:
| 组件名称 | 版本 | 用途 |
|---------|------|------|
| **Spring Boot** | 3.2.5 | 核心框架 |
| **MyBatis-Plus** | 3.5.5 | ORM 框架 |
| **Resilience4j** | 2.2.0 | 容错组件(限流、熔断、重试) |
| **Knife4j** | 4.5.0 | API 文档 |
| **FastJSON2** | 2.0.43 | JSON 序列化 |
| **Lombok** | 1.18.30 | 代码简化 |
| **MySQL** | 8.0 | 数据库 |
#### 前端技术栈:
| 组件名称 | 版本 | 用途 |
|---------|------|------|
| **Vue 3** | 3.4+ | 前端框架 |
| **Element Plus** | 2.7+ | UI 组件库 |
| **Axios** | 1.6+ | HTTP 客户端 |
| **Nginx** | 最新 | Web 服务器 |
---
## 五、常用命令
```bash
# 启动服务
docker compose up -d
# 查看运行状态
docker compose ps
# 查看 Admin 日志
docker compose logs -f governance-admin
# 查看 MySQL 日志
docker compose logs -f mysql
# 停止服务(保留数据)
docker compose down
# 重新构建镜像(代码修改后)
docker compose build --no-cache
docker compose up -d
```
---
## 六、完整示例
假设您有一个订单服务,想要:
1. 对用户接口限流(QPS=100)
2. 对支付接口熔断降级
3. 记录所有接口日志
### 配置步骤:
**步骤 1**:创建规则
- 规则名称:用户接口限流
- 匹配模式:前缀匹配
- 匹配值:`https://api.example.com/user`
**步骤 2**:配置拦截器
- 添加「请求限流」拦截器
- 参数:`qps=100, periodSeconds=1, blockEnabled=true, blockStatusCode=429`
**步骤 3**:再创建一条规则
- 规则名称:支付接口熔断
- 匹配模式:前缀匹配
- 匹配值:`https://api.example.com/payment`
**步骤 4**:配置拦截器
- 添加「熔断降级」拦截器
- 参数:`failureThreshold=50, waitDuration=30, fallbackEnabled=true`
**步骤 5**:再创建一条规则
- 规则名称:全链路日志
- 匹配模式:前缀匹配
- 匹配值:`https://api.example.com/`
**步骤 6**:配置拦截器
- 添加「接口日志」拦截器
- 参数:`logRequest=true, logResponse=true`
**步骤 7**:注册项目
- 项目编码:`order-service`
- 客户端类型:`RestTemplate`
- IP:`192.168.1.100`
- 端口:`8080`
**步骤 8**:推送配置
- 选择 `order-service` 项目
- 点击「推送配置」
完成!业务项目的 HTTP 请求现在会自动:
- 用户接口 QPS 超过 100 时返回 429
- 支付接口错误率超过 50% 时熔断并返回降级内容
- 所有请求/响应都会被记录到管理平台
---
## 七、FAQ
**Q: 12 个拦截器是否开箱即用?
A: 是的,12 个拦截器全部已实现并在 `governance-interceptor` 模块中。业务项目只需引入 Starter,拦截器会通过 Spring Boot 自动配置注入。
**Q: 配置推送失败怎么办?
A: 推送失败会记录到推送历史表,可通过「配置推送」页面查看,可重试推送。业务项目健康状态也会更新为异常。
**Q: 业务项目需要自己存储数据吗?
A: 不需要。业务项目只需:
1. 接收管理平台推送的配置(内存缓存)
2. 上报运维监控数据到管理平台
所有数据(配置、日志、事件)都由管理平台统一存储。
**Q: 接口日志数据量太大怎么办?
A: 接口日志支持以下优化:
1. 可以在「接口日志」拦截器中设置 `maxBodyLength` 限制请求/响应体大小
2. 可以设置 `logRequest=false` 或 `logResponse=false` 关闭部分日志
3. 管理平台数据库建议定期清理历史数据
**Q: 自定义拦截器如何开发?
A: 实现 `HttpGovernanceInterceptor` 接口,注册为 Spring Bean,然后在 Admin 数据库 `governance_interceptor_meta` 表添加元数据即可。
---
## 八、版本信息
- **Spring Boot**: 3.2.5
- **Java**: 21
- **MyBatis-Plus**: 3.5.5
- **Resilience4j**: 2.2.0
- **Knife4j**: 4.5.0
- **FastJSON2**: 2.0.43
- **Lombok**: 1.18.30
---
🛡️ **智盾** - 让您的 HTTP 请求更稳定、更安全、更可控!