docs(plans): 合并 K16 注册限流后台配置回执
This commit is contained in:
commit
575187a678
2 files changed
+163
-1
No files matched your search
+21
-1
@@ -20,7 +20,7 @@
|
||||
|
||||
---
|
||||
|
||||
## [待处理] 2026-10-17 | K16 注册限流改为可配置(支持不限制)
|
||||
## [已处理·待用户验收] 2026-10-17 | K16 注册限流改为可配置(支持不限制)
|
||||
|
||||
**用户指令(2026-10-17)**:「注册 429 限流做成可配置的,不限制或限制数量」。
|
||||
|
||||
@@ -55,6 +55,26 @@
|
||||
- 提交作者与提交者统一 `Zhou Weidong <502333560@qq.com>`;从干净 develop 拉 `feature/backend-register-rate-config`,完成后 `git merge --no-ff` 回 develop 并 push。
|
||||
- 留痕写入 `FruitServer/docs/plans/PROGRESS.md`。
|
||||
|
||||
### 四、K16 完成回执(2026-10-17)
|
||||
|
||||
**结论**:注册 IP/设备限流已改为读取后台 `sys_config`,开发两键为 0/0,
|
||||
支持 0=不限制;后台系统设置页可修改。注册接口与返回结构未变。
|
||||
|
||||
- 最终后端实现 `f1aaaee`,缺省回退测试 `f4003ed`,最终合并
|
||||
`5b7be2e`,已推送 `78fb995..5b7be2e develop`。
|
||||
- `AppAuthService` 注入 `ConfigService`,读取
|
||||
`app.register.max-per-ip-per-day` 和
|
||||
`app.register.max-per-device-per-day`;非法/缺失回退 5/3。
|
||||
- `sql/data-phase1.sql` 已增加幂等种子(0/0);当前开发库已写入并确认 ID 3/4。
|
||||
- 新增 Web 提交 `54db082`,合并 `5c087f4`;系统设置页可编辑两项,
|
||||
`pnpm build:pro` 通过。
|
||||
- `AppAuthServiceTest` 18 项通过,全量 `mvn test` BUILD SUCCESS。
|
||||
- 新 jar 已启动,`/healthz` 返回 200;当前 8081 PID `80642`。
|
||||
- 同一新设备号连续注册 4 次均 HTTP 200、`code=0`,不再出现 429。
|
||||
|
||||
命令、日志和服务自检原始输出见
|
||||
`docs/plans/PROGRESS.md`「32. K16 注册限流后台配置化」。
|
||||
|
||||
---
|
||||
|
||||
## [待处理] 2026-10-17 | K14 客户端文档:README + 任务清单 + 文件说明
|
||||
|
||||
@@ -2986,6 +2986,148 @@ c4694c6 fix(flutter): 增加首页服务器设置并更新真机默认地址
|
||||
|
||||
---
|
||||
|
||||
## 2026-10-17 K16 注册限流后台配置化
|
||||
|
||||
### 32.1 最终口径
|
||||
|
||||
叙述:K16 开工后 Trae 于 `461fb8e` 更新任务书,要求从 `sys_config` 读取配置,
|
||||
不使用 `application.yml` 固化。初版 `@Value` 实现已按最新口径修正。
|
||||
|
||||
最终配置键:
|
||||
|
||||
```text
|
||||
app.register.max-per-ip-per-day
|
||||
app.register.max-per-device-per-day
|
||||
```
|
||||
|
||||
- 值 <= 0:对应维度不限制;
|
||||
- 键缺失或非整数:回退 IP 5 / 设备 3;
|
||||
- 错误码和错误文案不变。
|
||||
|
||||
### 32.2 后端实现与测试
|
||||
|
||||
`AppAuthService` 注入 `ConfigService`,module-user 增加 module-system 依赖。
|
||||
首次红灯:
|
||||
|
||||
```text
|
||||
Could not find field 'maxRegisterPerIpPerDay'
|
||||
Tests run: 16, Failures: 0, Errors: 4
|
||||
```
|
||||
|
||||
最终定向测试:
|
||||
|
||||
```text
|
||||
$ mvn -pl fruitshorts-app-api -am -Dtest=AppAuthServiceTest -Dsurefire.failIfNoSpecifiedTests=false test
|
||||
Tests run: 18, Failures: 0, Errors: 0, Skipped: 0
|
||||
BUILD SUCCESS
|
||||
```
|
||||
|
||||
覆盖:IP 超限、设备超限、自定义阈值、IP=0、设备=0、缺省回退、非数字回退。
|
||||
|
||||
全量测试:
|
||||
|
||||
```text
|
||||
$ mvn test
|
||||
[INFO] BUILD SUCCESS
|
||||
```
|
||||
|
||||
### 32.3 种子配置与后台页面
|
||||
|
||||
`sql/data-phase1.sql` 增加幂等种子:
|
||||
|
||||
```sql
|
||||
INSERT INTO sys_config (id, config_key, config_value, remark) VALUES
|
||||
(3, 'app.register.max-per-ip-per-day', '0', '0=不限制;生产建议 5'),
|
||||
(4, 'app.register.max-per-device-per-day', '0', '0=不限制;生产建议 3')
|
||||
ON CONFLICT (config_key) DO NOTHING;
|
||||
```
|
||||
|
||||
当前开发库执行结果:
|
||||
|
||||
```text
|
||||
INSERT 0 2
|
||||
id | config_key | config_value | remark
|
||||
----+-------------------------------------+--------------+--------------------
|
||||
3 | app.register.max-per-ip-per-day | 0 | 0=不限制;生产建议 5
|
||||
4 | app.register.max-per-device-per-day | 0 | 0=不限制;生产建议 3
|
||||
```
|
||||
|
||||
后台 `SettingsView.vue` 原有页面只显示两个旧配置字段,因此补充了两个数值项,
|
||||
沿用现有 `/admin/configs` 接口,不新建页面。
|
||||
|
||||
```text
|
||||
$ pnpm build:pro
|
||||
Build successful. Please see dist-pro directory
|
||||
```
|
||||
|
||||
Web 提交 `54db082`,合并 `5c087f4`,已推送。
|
||||
|
||||
### 32.4 打包、重启与接口自检
|
||||
|
||||
```text
|
||||
$ mvn -pl fruitshorts-app-api -am package -DskipTests
|
||||
[INFO] BUILD SUCCESS
|
||||
```
|
||||
|
||||
旧 8081 服务停止后,通过 `launchctl` 启动新 jar。当前服务:
|
||||
|
||||
```text
|
||||
80642 0 com.fruitshorts.app-api
|
||||
java 80642 ... TCP *:8081 (LISTEN)
|
||||
```
|
||||
|
||||
健康检查:
|
||||
|
||||
```text
|
||||
HTTP/1.1 200
|
||||
{"code":0,"message":"ok","data":{"status":"UP","app":"fruitshorts-app-api",...}}
|
||||
```
|
||||
|
||||
同一新设备号连续注册 4 次(令牌字段已省略):
|
||||
|
||||
```text
|
||||
attempt 1 HTTP 200 {"code":0,"message":"ok","newUser":true,"uid":"U-4JA-DDD"}
|
||||
attempt 2 HTTP 200 {"code":0,"message":"ok","newUser":true,"uid":"UTIOUCLLV"}
|
||||
attempt 3 HTTP 200 {"code":0,"message":"ok","newUser":true,"uid":"UR6ZJRO74"}
|
||||
attempt 4 HTTP 200 {"code":0,"message":"ok","newUser":true,"uid":"UXJF6MECJ"}
|
||||
```
|
||||
|
||||
解读:开发库两键均为 0,IP 与设备 guard 均跳过,连续注册不再 429。
|
||||
|
||||
### 32.5 Git
|
||||
|
||||
```text
|
||||
FruitServer:
|
||||
3403a52 docs(plans): 增加 K16 注册限流配置化计划
|
||||
758eb69 feat(backend): 注册限流阈值改为可配置
|
||||
f1aaaee fix(backend): 改为后台配置注册限流阈值
|
||||
f4003ed test(backend): 覆盖注册限流缺省回退
|
||||
5b7be2e merge: 合并注册限流缺省回退测试
|
||||
78fb995..5b7be2e develop -> develop
|
||||
|
||||
ReelShortWeb:
|
||||
54db082 feat(admin): 增加注册限流配置项
|
||||
5c087f4 chore(admin): 合并注册限流配置项
|
||||
3ec9ea6..5c087f4 develop -> develop
|
||||
```
|
||||
|
||||
最终后端修正与 Web 提交的 author/committer 均为
|
||||
`Zhou Weidong <502333560@qq.com>`。
|
||||
|
||||
### 32.6 用户验收步骤
|
||||
|
||||
1. 登录后台「系统设置」。
|
||||
预期:看到注册频控两个数值项,当前均为 0。
|
||||
2. 将单设备上限改为 3,保存后使用同一设备注册第 4 次。
|
||||
预期:返回 429;恢复 0 后第 4 次可成功。
|
||||
3. 将单 IP 上限改为 1,保存后从同一 IP 注册第 2 次。
|
||||
预期:返回 429;恢复 0 后恢复不限。
|
||||
4. 验证完成后开发库恢复 0/0;生产配置建议恢复 IP 5 / 设备 3。
|
||||
|
||||
设备侧接口结果与后台截图由用户最终验收。
|
||||
|
||||
---
|
||||
|
||||
## 2026-10-17 iOS 构建阻塞:固定 shared_preferences_foundation 2.5.6
|
||||
|
||||
### 25.1 现象与根因
|
||||
|
||||
Reference in new issue
Block a user