docs: 更新H5接口文档,添加短信防刷配置说明

This commit is contained in:
神码-方晓辉 2026-02-02 21:44:46 +08:00
parent 5fe9d1117f
commit a47536315b
1 changed files with 71 additions and 6 deletions

View File

@ -2,7 +2,7 @@
> 作者:湖北新华业务中台研发团队 > 作者:湖北新华业务中台研发团队
> 创建时间2026-02-02 > 创建时间2026-02-02
> 版本v1.0 > 版本v1.1
--- ---
@ -189,6 +189,8 @@
``` ```
backend/ruoyi-modules/pangu-business/src/main/java/org/dromara/pangu/ backend/ruoyi-modules/pangu-business/src/main/java/org/dromara/pangu/
├── h5/ # H5接口模块 ├── h5/ # H5接口模块
│ ├── config/
│ │ └── H5SmsProperties.java # 短信防刷配置类
│ ├── controller/ │ ├── controller/
│ │ ├── H5AuthController.java # 认证接口 │ │ ├── H5AuthController.java # 认证接口
│ │ ├── H5MemberController.java # 会员信息接口 │ │ ├── H5MemberController.java # 会员信息接口
@ -265,12 +267,75 @@ sms:
template-id: SMS_XXXXXX template-id: SMS_XXXXXX
``` ```
短信验证码逻辑: #### 短信防刷配置application.yml
```yaml
h5:
sms:
# 是否启用短信发送false时仅打印日志用于测试
enabled: false
# 验证码长度
code-length: 6
# 验证码有效期(分钟)
code-expire-minutes: 5
# 同一手机号发送间隔(秒)
send-interval-seconds: 60
# 同一手机号每日发送上限
daily-limit-per-phone: 10
# 同一IP每分钟发送上限
minute-limit-per-ip: 5
# 同一IP每日发送上限
daily-limit-per-ip: 50
# 黑名单封禁时长(分钟)
blacklist-minutes: 30
# 触发黑名单的验证失败次数
blacklist-trigger-count: 5
# 阿里云短信配置名称对应sms.blends下的配置
sms-config-name: alibaba
# 短信模板ID - 登录
login-template-id: ''
# 短信模板ID - 注册
register-template-id: ''
```
#### 防刷策略
| 层级 | 策略 | 配置项 | 默认值 |
|------|------|--------|--------|
| 前置 | 图形验证码校验 | - | 必须 |
| 手机号 | 黑名单检查 | `blacklist-minutes` | 30分钟 |
| 手机号 | 发送间隔限制 | `send-interval-seconds` | 60秒 |
| 手机号 | 每日发送上限 | `daily-limit-per-phone` | 10条 |
| IP | 黑名单检查 | `blacklist-minutes` | 30分钟 |
| IP | 每分钟发送上限 | `minute-limit-per-ip` | 5条 |
| IP | 每日发送上限 | `daily-limit-per-ip` | 50条 |
| 验证 | 连续失败自动封禁 | `blacklist-trigger-count` | 5次 |
#### 验证码发送流程
1. 校验图形验证码 1. 校验图形验证码
2. 频率限制60秒内不可重发 2. 检查手机号是否在黑名单
3. 生成6位数字验证码5分钟有效 3. 检查IP是否在黑名单
4. 存入Redis`h5:sms:{phone}:{type}` 4. 检查发送间隔60秒
5. 调用阿里云API发送 5. 检查手机号每日上限
6. 检查IP每分钟上限
7. 检查IP每日上限
8. 业务校验(注册:手机号未注册;登录:手机号已注册)
9. 生成验证码并存入Redis
10. 更新各项计数器
11. 调用阿里云API发送测试模式仅打印日志
#### Redis Key 设计
| Key | 说明 | TTL |
|-----|------|-----|
| `h5:sms:code:{type}:{phone}` | 验证码 | 5分钟 |
| `h5:sms:daily:phone:{date}:{phone}` | 手机号每日计数 | 1天 |
| `h5:sms:minute:ip:{ip}` | IP每分钟计数 | 1分钟 |
| `h5:sms:daily:ip:{date}:{ip}` | IP每日计数 | 1天 |
| `h5:sms:blacklist:phone:{phone}` | 手机号黑名单 | 30分钟 |
| `h5:sms:blacklist:ip:{ip}` | IP黑名单 | 30分钟 |
| `h5:sms:fail:{phone}` | 验证失败计数 | 5分钟 |
### 3.5 数据库设计 ### 3.5 数据库设计