3.8 KiB
3.8 KiB
我的记录数据不显示问题排查
问题描述
- 管理端显示用户"道玄"(ID: 121)有完整的活动记录数据
- 移动端"我的记录"页面显示"暂无记录"
问题分析
数据流程
Android App → HTTP请求(带Token) → 后端拦截器验证Token → Controller获取userId → Service查询数据 → 返回结果
关键代码路径
- Android端Token发送:
ApiClient.java中的auth拦截器 - 后端Token验证:
FrontTokenInterceptor.java→FrontTokenComponent.check() - 获取用户ID:
UserService.getUserId()→FrontTokenComponent.getUserId() - 数据查询:
UserActivityRecordService.getViewHistory()等方法
可能的问题原因
-
Token未正确发送
ApiClient.appContext为 nullAuthStore.getToken()返回 null
-
Token在Redis中不存在或已过期
- Token过期时间: 24小时 (
TOKEN_EXPRESS_MINUTES = 60 * 24) - Redis key格式:
TOKEN_USER:+ token
- Token过期时间: 24小时 (
-
Token格式不匹配
- 后端期望的Header:
Authori-zation(注意中间有连字符)
- 后端期望的Header:
已添加的调试日志
Android端 (Logcat TAG: MyRecords, ApiClient)
加载记录: type=view, page=1, userId=xxx
Token状态: 存在, 长度=32, 前20字符=xxx...
请求URL: http://xxx/api/front/activity/view/history
请求头Authori-zation: xxx
添加Token到请求头: xxx...
后端 (搜索关键字)
[FrontTokenInterceptor] URI=xxx, rawToken=xxx, processedToken=xxx
[FrontTokenInterceptor] Token验证结果: true/false
[FrontTokenComponent] getUserId: rawToken=xxx, processedToken=xxx, redisKey=xxx, exists=true/false, userId=xxx
【观看历史】请求头Token: xxx
【观看历史】请求参数: userId=xxx, targetType=xxx, page=1, pageSize=20
【观看历史】返回结果: userId=xxx, total=xxx, listSize=xxx
调试步骤
1. 检查Android端Token
# 在Logcat中过滤
adb logcat -s MyRecords ApiClient AuthStore
预期输出:
- Token状态: 存在
- 添加Token到请求头: xxx...
2. 检查后端Token验证
查看后端日志,搜索 [FrontTokenInterceptor]
预期输出:
- rawToken 不为 null
- Token验证结果: true
3. 检查Redis中的Token
# 连接Redis
redis-cli
# 查看Token是否存在
EXISTS TOKEN_USER:your_token_here
# 查看Token对应的userId
GET TOKEN_USER:your_token_here
4. 使用调试接口
Android端会自动调用 api/front/activity/debug/token 接口,查看返回结果:
{
"header_Authori-zation": "xxx",
"header_Authorization": "xxx",
"userId": 121,
"isLoggedIn": true
}
解决方案
如果Token未发送
- 确保登录成功后Token已保存到SharedPreferences
- 检查
AuthStore.setToken()是否被正确调用
如果Token已过期
- 重新登录获取新Token
- 或者在Redis中手动延长Token过期时间
如果Token格式不匹配
- 确保Android端发送的Header名称是
Authori-zation - 确保Token值不包含前缀
TOKEN_USER:
修改的文件列表
-
zhibo/android-app/app/src/main/java/com/example/livestreaming/net/ApiClient.java- 增强Token拦截器日志
-
zhibo/android-app/app/src/main/java/com/example/livestreaming/MyRecordsActivity.java- 增加Token调试方法
- 增强请求日志
-
zhibo/android-app/app/src/main/java/com/example/livestreaming/net/ApiService.java- 添加调试接口
debugToken()
- 添加调试接口
-
zhibo/Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/interceptor/FrontTokenInterceptor.java- 增强Token验证日志
-
zhibo/Zhibo/zhibo-h/crmeb-common/src/main/java/com/zbkj/common/token/FrontTokenComponent.java- 增强
getUserId()方法日志
- 增强
-
zhibo/Zhibo/zhibo-h/crmeb-front/src/main/java/com/zbkj/front/controller/UserActivityRecordController.java- 增强各接口的请求日志
- 添加调试接口
/debug/token