添加Java和Kotlin实现的API签名工具,包括核心库、命令行工具和使用文档,支持多种签名算法和环境变量配置。

This commit is contained in:
SF-bytebytebrew
2025-05-21 18:44:37 +08:00
parent f6186868b7
commit d1fdcfa7e7
21 changed files with 2130 additions and 0 deletions

165
java/README.md Normal file
View File

@@ -0,0 +1,165 @@
# API签名工具 - Java实现
## 项目结构
根据实际项目文件结构:
```plaintext
java/
├── pom.xml # Maven项目配置
├── src/
│ ├── main/
│ │ └── java/
│ │ └── com/
│ │ └── soundforce/
│ │ └── apisign/
│ │ ├── ApiSigner.java # 签名工具实现
│ │ ├── Main.java # 命令行入口
│ │ ├── SignOptions.java # 签名配置
│ │ └── SignatureAlgorithm.java # 签名算法
│ └── test/
│ └── java/ # 测试代码目录
└── target/ # 构建输出目录
```
## 使用方法
### 构建项目
```bash
mvn clean package
```
### 运行命令行工具
```bash
java -jar target/apisign-1.0.0.jar [选项]
```
### 命令行选项
| 选项 | 描述 |
|------|------|
| `-a, --algorithm` | 签名算法: MD5, SHA1, SHA256, HMAC-SHA256 |
| `-u, --url` | API基础URL |
| `-p, --param` | 请求参数格式为key=value可多次使用 |
| `-k, --key` | 访问密钥ID |
| `-s, --secret` | 密钥 |
| `-c, --channel` | 合作渠道方ID |
| `-h, --help` | 显示帮助信息 |
### 常用命令示例
**基本用法**
```bash
java -jar target/apisign-1.0.0.jar
```
**自定义参数**
```bash
java -jar target/apisign-1.0.0.jar \
-u "https://api.example.com/user/info" \
-p "userId=12345" -p "action=getInfo" \
-k "YOUR_ACCESS_KEY" \
-s "YOUR_SECRET_KEY" \
-c "3"
```
**指定签名算法**
```bash
java -jar target/apisign-1.0.0.jar -a SHA256
```
**帮助信息**
```bash
java -jar target/apisign-1.0.0.jar --help
```
### API接口测试实例
使用真实API接口进行测试
```bash
# 未签名的API调用测试 - 返回错误
curl "https://api-v1.sound-force.com:8443/p/album/single/media-url?channelId=3&singleId=381980"
# 返回: {"code":400,"data":null,"msg":"Missing AccessKeyId","success":false}
# 生成访问https://api-v1.sound-force.com:8443/p/album/single/media-url的签名URL
java -jar target/apisign-1.0.0.jar \
-a MD5 \
-u "https://api-v1.sound-force.com:8443/p/album/single/media-url" \
-p "singleId=381980" \
-k "YOUR_ACCESS_KEY" \
-s "YOUR_SECRET_KEY" \
-c "3"
# 使用curl测试API接口
signed_url=$(java -jar target/apisign-1.0.0.jar \
-a MD5 \
-u "https://api-v1.sound-force.com:8443/p/album/single/media-url" \
-p "singleId=381980" \
-k "YOUR_ACCESS_KEY" \
-s "YOUR_SECRET_KEY" \
-c "3" | grep -A 1 "签名后的URL:" | tail -n 1)
curl -v "$signed_url"
```
请注意:
- 替换`YOUR_ACCESS_KEY`为实际的访问密钥ID
- 替换`YOUR_SECRET_KEY`为实际的密钥
- 示例使用的渠道ID为`3`,请根据实际情况调整
使用有效的密钥和签名后API接口将返回成功响应(状态码200)并提供媒体URL数据。
### 代码集成
```java
import com.soundforce.apisign.ApiSigner;
import com.soundforce.apisign.SignOptions;
import com.soundforce.apisign.SignatureAlgorithm;
import java.util.HashMap;
import java.util.Map;
// 创建签名选项
SignOptions options = new SignOptions(SignatureAlgorithm.MD5);
// 创建签名工具
ApiSigner signer = new ApiSigner(options);
// 准备请求参数
Map<String, String> params = new HashMap<>();
params.put("singleId", "381980");
// 执行签名
Map<String, String> signedParams = signer.signRequest(
params,
"YOUR_ACCESS_KEY",
"YOUR_SECRET_KEY",
"3"
);
// 或签名URL
String signedUrl = signer.signUrl(
"https://api-v1.sound-force.com:8443/p/album/single/media-url",
params,
"YOUR_ACCESS_KEY",
"YOUR_SECRET_KEY",
"3"
);
```
### 环境变量
该工具支持从`.env`文件加载以下配置:
- `ACCESS_KEY_ID`: 访问密钥ID
- `SECRET_KEY`: 密钥
- `CHANNEL_ID`: 渠道ID
- `SIGN_ALGORITHM`: 签名算法
- `API_BASE_URL`: API基础URL