# 管理员统计接口404错误修复说明 ## 问题概述 应用出现静态资源404错误,具体表现为: ``` No static resource admin/statistics/most-viewed-videos No static resource admin/statistics/most-used-workflows ``` ## 错误原因分析 ### 1. 问题本质 前端请求缺少JWT认证头,导致Spring Security将API请求误当作静态资源请求处理。 ### 2. 技术细节 - **后端接口正常**:`AdminRevenueController` 中存在对应的API接口 - **路由配置正确**: - `@RequestMapping("/admin")` + `@GetMapping("/statistics/most-used-workflows")` - `@RequestMapping("/admin")` + `@GetMapping("/statistics/most-viewed-videos")` - **认证缺失**:前端 fetch 请求没有携带 JWT Authorization 头 - **Spring Security拦截**:未认证请求被当作静态资源处理 ### 3. 对比分析 ✅ **正常工作的接口**:`/admin/revenue/statistics` - 有JWT认证 ❌ **出错的接口**:`/admin/statistics/most-*` - 缺少JWT认证 ## 解决方案 ### 修改文件 `src/main/resources/static/test_admin_stats.html` ### 修改前的代码 ```javascript const response = await fetch(`/admin/statistics/most-used-workflows?${params.toString()}`, { method: 'GET', headers: { 'Content-Type': 'application/json' } }); ``` ### 修改后的代码 ```javascript const response = await fetch(`/admin/statistics/most-used-workflows?${params.toString()}`, { method: 'GET', headers: { 'Content-Type': 'application/json', 'Authorization': 'Bearer ' + (localStorage.getItem('adminToken') || sessionStorage.getItem('adminToken') || '') } }); ``` ## 修复内容 1. **为工作流统计接口添加认证头** - 接口:`/admin/statistics/most-used-workflows` - 添加:`Authorization: Bearer [token]` 2. **为视频统计接口添加认证头** - 接口:`/admin/statistics/most-viewed-videos` - 添加:`Authorization: Bearer [token]` ## 认证Token获取逻辑 ```javascript localStorage.getItem('adminToken') || sessionStorage.getItem('adminToken') || '' ``` - 优先从 `localStorage` 获取管理员token - 如果不存在,则从 `sessionStorage` 获取 - 都不存在时使用空字符串 ## 验证方法 ### 1. 重启应用后测试 ```bash # 重新编译并启动应用 mvn spring-boot:run ``` ### 2. 检查日志 - ✅ **成功标志**:应该看到类似这样的日志 ``` INFO c.d.controller.AdminRevenueController : 收到获取最多使用工作流统计请求 INFO c.d.controller.AdminRevenueController : 收到获取最多观看视频统计请求 ``` - ❌ **错误标志**:不应再看到 `NoResourceFoundException` ### 3. 前端测试 访问 `http://localhost:8081/test_admin_stats.html` 并: 1. 确保已登录管理员账户 2. 测试"最多使用工作流统计"功能 3. 测试"最多观看视频统计"功能 ## 注意事项 1. **Token有效性**:确保管理员token未过期 2. **登录状态**:使用前需要先通过管理员登录接口获取token 3. **权限检查**:确保当前管理员有访问统计数据的权限 ## 预防措施 为避免类似问题,在编写新的管理员功能时: 1. **统一认证处理**:所有管理员API请求都应携带JWT token 2. **测试覆盖**:新增API时同步更新测试页面的认证逻辑 3. **错误监控**:定期检查应用日志,及时发现认证相关问题 ## 相关文件 - **后端控制器**:`src/main/java/com/dora/controller/AdminRevenueController.java` - **前端测试页面**:`src/main/resources/static/test_admin_stats.html` - **认证配置**:`src/main/java/com/dora/config/JwtAuthenticationFilter.java` 修复完成后,原本的404错误应该消失,接口能够正常响应数据。