普兆健康管家后端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

201 lines
5.2 KiB

  1. # 小程序登录修复说明
  2. ## 修复的问题
  3. ### 1. 用户信息获取问题
  4. **原问题**: `AppletShiroRealm` 中的 `getAppletUser` 方法返回null,导致无法正确获取用户信息。
  5. **修复方案**:
  6. - 完善了 `getAppletUser` 方法,支持从数据库和Redis缓存获取用户信息
  7. - 添加了用户信息缓存机制,提高性能
  8. - 增加了异常处理和日志记录
  9. ### 2. Token验证逻辑不完整
  10. **原问题**: Token验证缺少黑名单检查和刷新机制。
  11. **修复方案**:
  12. - 添加了token黑名单检查
  13. - 完善了token刷新逻辑
  14. - 统一了token管理机制
  15. ### 3. Shiro认证体系集成问题
  16. **原问题**: 小程序登录没有正确集成到Shiro认证体系。
  17. **修复方案**:
  18. - 创建了专用的 `AppletShiroConfig` 配置类
  19. - 完善了 `AppletShiroRealm` 的认证和授权逻辑
  20. - 添加了小程序用户默认权限配置
  21. ### 4. 控制器参数验证不足
  22. **原问题**: 控制器缺少参数验证和错误处理。
  23. **修复方案**:
  24. - 添加了完整的参数验证
  25. - 增加了Swagger API文档注解
  26. - 完善了错误处理和日志记录
  27. ## 新增功能
  28. ### 1. 用户工具类
  29. 创建了 `AppletUserUtil` 工具类,提供以下功能:
  30. - `getCurrentAppletUser()`: 获取当前登录的小程序用户
  31. - `getCurrentAppletUserId()`: 获取当前用户ID
  32. - `getCurrentAppletUserOpenid()`: 获取当前用户openid
  33. - `isAppletUserLoggedIn()`: 检查用户是否已登录
  34. - `hasPermission()`: 检查用户权限
  35. - `hasRole()`: 检查用户角色
  36. ### 2. 缓存机制
  37. - 用户信息缓存(30分钟)
  38. - Token缓存(JWT过期时间的2倍)
  39. - Session_key缓存(7天)
  40. - 手机号临时缓存(5分钟)
  41. - Token黑名单缓存(24小时)
  42. ### 3. 权限控制
  43. - 小程序用户默认角色:`applet_user`
  44. - 小程序用户默认权限:`applet:user:*`
  45. - 支持细粒度权限控制
  46. ## 使用示例
  47. ### 1. 在控制器中获取当前用户
  48. ```java
  49. @GetMapping("/getCurrentUser")
  50. public Result<AppletUser> getCurrentUser() {
  51. AppletUser currentUser = AppletUserUtil.getCurrentAppletUser();
  52. if (currentUser == null) {
  53. return Result.error("用户未登录");
  54. }
  55. return Result.OK("获取成功", currentUser);
  56. }
  57. ```
  58. ### 2. 权限检查
  59. ```java
  60. @PostMapping("/sensitiveOperation")
  61. public Result<String> sensitiveOperation() {
  62. if (!AppletUserUtil.hasPermission("applet:user:edit")) {
  63. return Result.error("权限不足");
  64. }
  65. // 执行敏感操作
  66. return Result.OK("操作成功");
  67. }
  68. ```
  69. ### 3. 角色检查
  70. ```java
  71. @GetMapping("/adminOnly")
  72. public Result<String> adminOnly() {
  73. if (!AppletUserUtil.hasRole("applet_admin")) {
  74. return Result.error("需要管理员权限");
  75. }
  76. return Result.OK("管理员操作成功");
  77. }
  78. ```
  79. ## 配置要求
  80. ### 1. 数据库配置
  81. 确保 `applet_user` 表已创建,包含以下字段:
  82. - `id`: 主键
  83. - `openid`: 微信openid(唯一索引)
  84. - `phone`: 手机号(唯一索引)
  85. - `name`: 用户昵称
  86. - `avatar`: 头像
  87. - `bmi`: 体总指数
  88. - `fat`: 脂肪
  89. - `create_time`: 创建时间
  90. - `update_time`: 更新时间
  91. ### 2. Redis配置
  92. 确保Redis服务正常运行,用于缓存:
  93. - 用户信息
  94. - Token缓存
  95. - Session_key
  96. - 黑名单
  97. ### 3. 微信配置
  98. `application.yml` 中配置:
  99. ```yaml
  100. wechat:
  101. mpAppId: your_applet_appid
  102. mpAppSecret: your_applet_secret
  103. ```
  104. ### 4. JWT配置
  105. 确保JWT工具类能正确读取配置:
  106. ```yaml
  107. jeecg:
  108. jwt:
  109. secret: your_jwt_secret_key
  110. expire: 604800
  111. ```
  112. ## 安全改进
  113. ### 1. Token安全
  114. - 生产环境不返回session_key
  115. - Token自动刷新机制
  116. - Token黑名单管理
  117. - 支持token主动失效
  118. ### 2. 参数验证
  119. - 所有接口都添加了参数验证
  120. - 防止空参数和恶意参数
  121. - 统一的错误处理
  122. ### 3. 权限控制
  123. - 基于Shiro的权限控制
  124. - 支持角色和权限检查
  125. - 细粒度权限管理
  126. ## 性能优化
  127. ### 1. 缓存策略
  128. - 用户信息缓存减少数据库查询
  129. - Token缓存提高验证速度
  130. - 合理的缓存过期时间
  131. ### 2. 异常处理
  132. - 完善的异常捕获和处理
  133. - 详细的日志记录
  134. - 友好的错误提示
  135. ### 3. 并发处理
  136. - 线程安全的用户信息获取
  137. - 原子性的token操作
  138. - 避免并发冲突
  139. ## 测试建议
  140. ### 1. 功能测试
  141. - 测试完整的登录流程
  142. - 测试token刷新机制
  143. - 测试权限控制功能
  144. - 测试异常情况处理
  145. ### 2. 性能测试
  146. - 测试高并发登录
  147. - 测试缓存命中率
  148. - 测试数据库连接池
  149. ### 3. 安全测试
  150. - 测试token伪造防护
  151. - 测试权限绕过防护
  152. - 测试参数注入防护
  153. ## 注意事项
  154. 1. **生产环境配置**: 确保生产环境使用HTTPS,不要暴露敏感信息
  155. 2. **日志管理**: 合理配置日志级别,避免敏感信息泄露
  156. 3. **监控告警**: 添加关键操作的监控和告警
  157. 4. **备份策略**: 定期备份用户数据和配置信息
  158. 5. **版本兼容**: 注意API版本兼容性,避免影响现有客户端
  159. ## 后续优化建议
  160. 1. **多租户支持**: 如果需要支持多租户,可以扩展用户表结构
  161. 2. **第三方登录**: 可以扩展支持其他第三方登录方式
  162. 3. **消息推送**: 集成消息推送功能,支持实时通知
  163. 4. **数据分析**: 添加用户行为分析功能
  164. 5. **自动化测试**: 编写完整的自动化测试用例