1
This commit is contained in:
279
doc/公开订单提交-快速部署指南.md
Normal file
279
doc/公开订单提交-快速部署指南.md
Normal file
@@ -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
|
||||
<!-- 设置公开订单控制器的日志级别 -->
|
||||
<logger name="com.ruoyi.web.controller.public_" level="INFO"/>
|
||||
```
|
||||
|
||||
## 七、安全建议
|
||||
|
||||
### 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`
|
||||
|
||||
@@ -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<String, String> body, HttpServletRequest request) {
|
||||
|
||||
Reference in New Issue
Block a user