diff --git a/doc/公开订单提交-快速部署指南.md b/doc/公开订单提交-快速部署指南.md new file mode 100644 index 0000000..119cdb5 --- /dev/null +++ b/doc/公开订单提交-快速部署指南.md @@ -0,0 +1,279 @@ +# 公开订单提交功能 - 快速部署指南 + +## 一、功能说明 + +本功能提供一个公开的订单提交页面,特点如下: + +✅ **无需登录** - 直接访问即可使用 +✅ **接口限流** - 每IP每分钟最多3次请求 +✅ **详细日志** - 记录所有请求的完整信息 +✅ **安全保护** - 只允许提交订单,拒绝其他指令 +✅ **简化界面** - 去掉历史记录,只保留核心功能 + +## 二、新增文件清单 + +### 前端文件 +``` +d:\code\ruoyi-vue\src\views\public\order-submit\index.vue # 公开订单提交页面 +d:\code\ruoyi-vue\src\api\public\order.js # API接口文件 +``` + +### 后端文件 +``` +d:\code\RuoYi-Vue-master\ruoyi-java\ruoyi-admin\src\main\java\com\ruoyi\web\controller\public_\PublicOrderController.java # 公开控制器 +``` + +### 文档文件 +``` +d:\code\RuoYi-Vue-master\ruoyi-java\doc\公开订单提交功能说明.md +d:\code\RuoYi-Vue-master\ruoyi-java\doc\公开订单提交-快速部署指南.md +``` + +## 三、修改文件清单 + +### 前端修改 +``` +d:\code\ruoyi-vue\src\router\index.js +``` +**修改内容**:添加公开订单提交页面路由(无需登录) + +### 后端修改 +``` +d:\code\RuoYi-Vue-master\ruoyi-java\ruoyi-framework\src\main\java\com\ruoyi\framework\config\SecurityConfig.java +``` +**修改内容**:添加 `/public/**` 路径到公开访问白名单 + +## 四、部署步骤 + +### 步骤1:后端部署 + +#### 1.1 编译项目 +```bash +cd d:\code\RuoYi-Vue-master\ruoyi-java +mvn clean package -DskipTests +``` + +#### 1.2 重启后端服务 +```bash +# Windows +ry.bat + +# Linux +./ry.sh +``` + +#### 1.3 验证后端 +检查日志,确保启动成功,无报错。 + +### 步骤2:前端部署 + +#### 2.1 安装依赖(如果需要) +```bash +cd d:\code\ruoyi-vue +npm install +``` + +#### 2.2 开发环境运行 +```bash +npm run dev +``` + +#### 2.3 生产环境构建 +```bash +npm run build:prod +``` + +#### 2.4 部署到Web服务器 +将 `dist` 目录的内容部署到Nginx或其他Web服务器。 + +### 步骤3:验证部署 + +#### 3.1 访问页面 +打开浏览器,访问: +``` +http://localhost/public/order-submit +``` + +#### 3.2 提交测试订单 + +在页面中输入以下测试数据: +``` +单: +2025-01-21 001 +备注:测试订单 +分销标记:H-TF +型号:ZQD180F-EB200 +链接:https://item.jd.com/123456.html +下单付款:1650 +后返金额:50 +地址:张三13800138000上海市浦东新区张江高科技园区 +物流链接:https://test.com +订单号:1234567890 +下单人:张三 +``` + +#### 3.3 查看响应 +页面应显示提交成功的响应信息。 + +#### 3.4 检查日志 +查看后端日志文件,应看到类似以下内容: +``` +====================================== +公开订单提交 - 开始 +客户端IP: 127.0.0.1 +User-Agent: Mozilla/5.0... +请求时间: 2025-01-21 10:00:00 +... +公开订单提交 - 结束(成功) +====================================== +``` + +#### 3.5 测试限流 +快速提交4次订单,第4次应该被拒绝,提示"访问过于频繁"。 + +## 五、访问地址 + +### 开发环境 +``` +前端页面:http://localhost:80/public/order-submit +后端接口:http://localhost:8080/public/order/submit +``` + +### 生产环境 +``` +前端页面:http://your-domain.com/public/order-submit +后端接口:http://your-domain.com/api/public/order/submit +``` + +## 六、配置说明 + +### 限流配置 + +如需修改限流策略,编辑 `PublicOrderController.java`: + +```java +@RateLimiter( + key = CacheConstants.RATE_LIMIT_KEY, + time = 60, // 时间窗口(秒),可修改 + count = 3, // 允许次数,可修改 + limitType = LimitType.IP +) +``` + +修改后重新编译部署: +```bash +mvn clean package -DskipTests +``` + +### 日志配置 + +如需调整日志级别,编辑 `logback.xml`: + +```xml + + +``` + +## 七、安全建议 + +### 1. 启用HTTPS +生产环境务必启用HTTPS,保护数据传输安全。 + +### 2. 配置防火墙 +只开放必要的端口(80/443)。 + +### 3. 监控异常 +设置告警规则,监控以下情况: +- 错误率异常升高 +- 限流触发频繁 +- 可疑IP地址 + +### 4. 定期备份 +定期备份订单数据和日志文件。 + +### 5. IP黑名单 +如发现恶意IP,可在 `SecurityConfig.java` 中添加黑名单规则。 + +## 八、常见问题 + +### Q1: 页面404怎么办? + +**检查清单**: +- [ ] 前端路由配置是否正确 +- [ ] 后端安全配置是否添加 `/public/**` +- [ ] 前端是否正确构建和部署 +- [ ] Web服务器配置是否正确 + +### Q2: 接口403/401怎么办? + +**解决方法**: +1. 检查 `SecurityConfig.java` 是否添加了 `.antMatchers("/public/**").permitAll()` +2. 重新编译部署后端 +3. 清除浏览器缓存重试 + +### Q3: 限流不生效怎么办? + +**检查清单**: +- [ ] Redis服务是否正常运行 +- [ ] 后端是否正确连接Redis +- [ ] `@RateLimiter` 注解是否正确配置 + +### Q4: 日志没有记录怎么办? + +**解决方法**: +1. 检查 `logback.xml` 日志级别配置 +2. 确认日志文件路径是否正确 +3. 检查文件写入权限 + +### Q5: 提交后无响应怎么办? + +**排查步骤**: +1. 打开浏览器开发者工具,查看网络请求 +2. 检查后端日志是否有报错 +3. 检查订单格式是否正确 +4. 确认所有必填字段是否填写 + +## 九、分享链接 + +部署成功后,可以将以下链接分享给需要提交订单的用户: + +``` +http://your-domain.com/public/order-submit +``` + +建议同时提供: +1. 订单格式说明 +2. 必填字段列表 +3. 示例订单数据 +4. 联系方式(遇到问题时) + +## 十、监控仪表板 + +建议设置监控指标: + +### 关键指标 +- **请求总数**:每日/每小时提交次数 +- **成功率**:提交成功的比例 +- **平均响应时间**:接口响应速度 +- **限流触发次数**:被限流的请求数量 +- **Top IP**:请求最多的IP地址 + +### 告警规则 +- 错误率 > 5% → 发送告警 +- 平均响应时间 > 3秒 → 发送告警 +- 单IP限流触发 > 10次/小时 → 发送告警 + +## 十一、后续优化建议 + +1. **图形验证码**:添加验证码防止机器人 +2. **IP白名单**:为信任的IP提供更高的限流额度 +3. **订单预览**:提交前预览订单信息 +4. **批量提交**:支持一次提交多个订单 +5. **提交历史**:为用户提供本地提交历史记录 + +--- + +**部署完成!** 🎉 + +如有问题,请查看详细文档:`公开订单提交功能说明.md` + diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/public_/PublicOrderController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/public_/PublicOrderController.java index a2eb751..bb0273c 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/public_/PublicOrderController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/public_/PublicOrderController.java @@ -39,7 +39,7 @@ public class PublicOrderController extends BaseController { * 提交订单 * * 限流策略: - * - 每个IP每分钟最多3次请求 + * - 每个IP半小时(30分钟)最多20次请求 * - 防止恶意刷单和攻击 * * @param body 请求体,包含command字段 @@ -49,8 +49,8 @@ public class PublicOrderController extends BaseController { @PostMapping("/submit") @RateLimiter( key = CacheConstants.RATE_LIMIT_KEY, - time = 60, - count = 3, + time = 1800, + count = 20, limitType = LimitType.IP ) public AjaxResult submit(@RequestBody Map body, HttpServletRequest request) {