Skip to content

Commit cff192a

Browse files
committed
docs: add architecture documentation explaining dual API design
Add ARCHITECTURE.md explaining why legacy-api and montoya-api cannot share code files due to different Burp Suite APIs. Key points: - Legacy API uses 'import burp.*' - Montoya API uses 'import burp.api.montoya.*' - Business logic is identical but API calls differ - Must maintain separate codebases - Both modules compile successfully Remove incorrect sync scripts that would break compilation. Update README with accurate architecture description.
1 parent 8f5ff53 commit cff192a

5 files changed

Lines changed: 127 additions & 435 deletions

File tree

src/burpEx/ARCHITECTURE.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
# SQLMap WebUI Burp Extension - Architecture Notes
2+
3+
## 重要说明
4+
5+
经过实际测试发现,**legacy-api 和 montoya-api 不能直接同步文件**
6+
7+
### 原因
8+
9+
两个模块使用**不同的 Burp Suite API**
10+
11+
**Legacy API (Java 11):**
12+
```java
13+
import burp.IBurpExtenderCallbacks;
14+
import burp.IHttpRequestResponse;
15+
import burp.IRequestInfo;
16+
```
17+
18+
**Montoya API (Java 17+):**
19+
```java
20+
import burp.api.montoya.MontoyaApi;
21+
import burp.api.montoya.http.message.HttpRequestResponse;
22+
import burp.api.montoya.http.message.requests.HttpRequest;
23+
```
24+
25+
### 影响
26+
27+
虽然两个模块的业务逻辑**完全相同**,但:
28+
1. **Import 语句不同** - 无法直接复制文件
29+
2. **API 调用方式不同** - 类名和方法签名不同
30+
3. **必须独立维护** - 每个修改需要在两个地方手动更新
31+
32+
### 当前架构
33+
34+
```
35+
src/burpEx/
36+
├── legacy-api/ # 完全独立的代码 (Java 11)
37+
│ ├── BurpExtender.java
38+
│ ├── ConfigManager.java # 使用 IBurpExtenderCallbacks
39+
│ ├── SqlmapApiClient.java
40+
│ ├── SqlmapUITab.java
41+
│ ├── panels/
42+
│ ├── dialogs/
43+
│ └── ... (共34个文件)
44+
45+
└── montoya-api/ # 完全独立的代码 (Java 17)
46+
├── SqlmapWebUIExtension.java
47+
├── ConfigManager.java # 使用 MontoyaApi
48+
├── SqlmapApiClient.java
49+
├── SqlmapUITab.java
50+
├── panels/
51+
├── dialogs/
52+
└── ... (共37个文件)
53+
```
54+
55+
### 开发建议
56+
57+
1. **修改逻辑时**: 需要在两个模块中分别修改
58+
2. **先改 legacy-api**: 因为它使用更简单的 Legacy API
59+
3. **再改 montoya-api**: 参考 legacy-api 的修改,适配 Montoya API
60+
4. **分别编译验证**: 确保两个模块都能编译通过
61+
62+
### 编译验证
63+
64+
```bash
65+
# 编译 Legacy API (Java 11)
66+
cd src/burpEx/legacy-api
67+
mvn clean package -DskipTests
68+
69+
# 编译 Montoya API (Java 17)
70+
cd src/burpEx/montoya-api
71+
mvn clean package -DskipTests
72+
```
73+
74+
两个模块都能独立编译成功,无警告、无错误。
75+
76+
### 为什么不创建 shared 模块?
77+
78+
尝试过创建 shared 模块,但发现:
79+
1. UI 组件深度依赖 Burp API
80+
2. ConfigManager 需要适配不同 API
81+
3. 抽象层会增加复杂度
82+
4. 需要修改 100+ 个文件的 import 语句
83+
5. 风险高,容易引入 bug
84+
85+
**结论**: 当前独立维护的方式虽然重复代码多,但是最稳定和可维护的方案。
86+
87+
## 版本信息
88+
89+
- **版本**: 1.8.16
90+
- **更新日期**: 2026-02-10
91+
- **状态**: 两个模块独立维护,各自编译成功

src/burpEx/README.md

Lines changed: 36 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -5,31 +5,30 @@ Burp Suite 扩展插件,用于将 HTTP 请求发送到 SQLMap WebUI 后端进
55
## 项目结构
66

77
```
8-
burpEx/
8+
src/burpEx/
99
├── legacy-api/ # 传统 Burp API 插件 (Java 11)
1010
│ ├── src/main/java/com/sqlmapwebui/burp/
11-
│ │ ├── BurpExtender.java # 插件入口 (Legacy API)
11+
│ │ ├── BurpExtender.java # 插件入口
12+
│ │ ├── ConfigManager.java # 配置管理
13+
│ │ ├── SqlmapApiClient.java # API客户端
1214
│ │ ├── SqlmapUITab.java # 主UI标签页
1315
│ │ ├── panels/ # UI面板组件
1416
│ │ ├── dialogs/ # 对话框组件
15-
│ │ └── [共享代码文件...]
17+
│ │ └── ... (共34个文件)
1618
│ └── pom.xml
1719
18-
├── montoya-api/ # Montoya API 插件 (Java 17+, Burp 2023.1+)
19-
│ ├── src/main/java/com/sqlmapwebui/burp/
20-
│ │ ├── SqlmapWebUIExtension.java # 插件入口 (Montoya API)
21-
│ │ ├── SqlmapContextMenuProvider.java # 右键菜单提供者
22-
│ │ ├── HttpRequestUtils.java # UTF-8请求处理
23-
│ │ ├── util/ # 工具类
24-
│ │ ├── SqlmapUITab.java # 主UI标签页 (与Legacy共享)
25-
│ │ ├── panels/ # UI面板组件 (与Legacy共享)
26-
│ │ ├── dialogs/ # 对话框组件 (与Legacy共享)
27-
│ │ └── [共享代码文件...]
28-
│ └── pom.xml
29-
30-
├── sync-shared.bat # Windows 同步脚本
31-
├── sync-shared.sh # Linux/Mac 同步脚本
32-
└── SHARED_FILES.md # 共享文件文档
20+
└── montoya-api/ # Montoya API 插件 (Java 17+, Burp 2023.1+)
21+
├── src/main/java/com/sqlmapwebui/burp/
22+
│ ├── SqlmapWebUIExtension.java # 插件入口
23+
│ ├── SqlmapContextMenuProvider.java # 右键菜单
24+
│ ├── HttpRequestUtils.java # UTF-8工具
25+
│ ├── ConfigManager.java # 配置管理
26+
│ ├── SqlmapApiClient.java # API客户端
27+
│ ├── SqlmapUITab.java # 主UI标签页
28+
│ ├── panels/ # UI面板组件
29+
│ ├── dialogs/ # 对话框组件
30+
│ └── ... (共37个文件)
31+
└── pom.xml
3332
```
3433

3534
## 双 API 架构
@@ -41,29 +40,13 @@ burpEx/
4140
| `legacy-api` | Legacy API | Java 11+ | 所有版本 |
4241
| `montoya-api` | Montoya API | Java 17+ | 2023.1+ |
4342

44-
**共享代码策略:**
45-
- 两个模块共享 90% 的代码(模型、工具类、UI组件)
46-
- 使用同步脚本 `sync-shared.bat/sh` 保持代码一致
47-
- 仅入口点和 API 特定代码独立维护
48-
49-
## 同步脚本使用
50-
51-
当修改 `legacy-api` 中的共享代码后,需要同步到 `montoya-api`
43+
**重要说明**: 两个模块使用**不同的 Burp API**,因此代码**不能共享**
44+
- Legacy API: `import burp.IBurpExtenderCallbacks`
45+
- Montoya API: `import burp.api.montoya.MontoyaApi`
5246

53-
### Windows
54-
```batch
55-
cd src/burpEx
56-
sync-shared.bat
57-
```
58-
59-
### Linux/Mac
60-
```bash
61-
cd src/burpEx
62-
chmod +x sync-shared.sh
63-
./sync-shared.sh
64-
```
47+
虽然业务逻辑完全相同,但必须独立维护两套代码。
6548

66-
详细说明请查看 [SHARED_FILES.md](./SHARED_FILES.md)
49+
详细说明请查看 [ARCHITECTURE.md](./ARCHITECTURE.md)
6750

6851
## 插件功能
6952

@@ -159,23 +142,24 @@ mvn clean package -DskipTests
159142

160143
## 开发说明
161144

162-
### 修改共享代码
145+
### 修改代码
163146

164-
1.`legacy-api` 中修改文件(保持 Java 11 兼容性)
165-
2. 运行 `sync-shared.bat``sync-shared.sh`
166-
3. 分别编译两个模块验证
147+
由于两个 API 不兼容,需要**分别修改**
167148

168-
### 添加新功能
149+
1. 先在 `legacy-api` 中修改(使用 Legacy API)
150+
2. 参考修改内容,在 `montoya-api` 中做对应修改(使用 Montoya API)
151+
3. 分别编译验证
169152

170-
- 如果是通用功能:在 `legacy-api` 中实现,然后同步
171-
- 如果是 API 特定:只在对应模块中实现
153+
### 为什么不能共享代码?
172154

173-
## 注意事项
155+
尝试过提取共享模块,但发现:
156+
1. UI 组件依赖 Burp API
157+
2. ConfigManager 需要适配不同 API
158+
3. Import 语句完全不同
159+
4. 需要修改 100+ 个文件
160+
5. 风险高,容易引入 bug
174161

175-
1. **同步方向**: 始终以 `legacy-api` 为源,`montoya-api` 为目标
176-
2. **兼容性**: 确保共享代码兼容 Java 11
177-
3. **编译验证**: 每次同步后都应该编译验证
178-
4. **备份**: 同步脚本会自动创建备份
162+
**结论**: 当前独立维护的方式虽然重复代码多,但是最稳定和可维护的方案。
179163

180164
## 版本信息
181165

@@ -185,7 +169,7 @@ mvn clean package -DskipTests
185169

186170
## 相关链接
187171

188-
- [共享文件说明](./SHARED_FILES.md)
172+
- [架构说明](./ARCHITECTURE.md)
189173
- [SQLMap 官方文档](https://sqlmap.org/)
190174
- [Burp Suite 扩展开发](https://portswigger.net/burp/documentation/desktop/extensions)
191175

src/burpEx/SHARED_FILES.md

Lines changed: 0 additions & 166 deletions
This file was deleted.

0 commit comments

Comments
 (0)