QDAirPortBackend0122/doc/work/验证码404问题修复_20250116.md
2026-01-22 13:19:47 +08:00

3.6 KiB
Raw Blame History

验证码404问题修复工作记录

时间: 2025年1月16日
版本: 0.2.1 → 0.2.2
问题: 前端管理界面登录验证码图片显示404错误

问题分析

根本原因

Spring Boot主启动类QuapApplication的包扫描配置中缺少了com.qaup.web包,导致CaptchaController验证码控制器未被扫描注册。

错误表现

  • 前端登录页面验证码显示"系统接口 404 异常"
  • 后端接口/captchaImage返回404 Not Found
  • 通过/actuator/mappings确认验证码接口未注册

技术分析

  • CaptchaController位于com.qaup.web.controller.common
  • @ComponentScan配置中遗漏了com.qaup.web
  • 验证码相关依赖配置完整kaptcha 2.3.3

修复过程

1. WebSocket并发问题修复

在解决验证码问题的同时发现并修复了WebSocket并发问题

  • 问题: 多线程同时发送WebSocket消息导致TEXT_PARTIAL_WRITING状态错误
  • 解决: 在CollisionWebSocketHandler.sendMessage()方法中添加synchronized (session)
// 添加同步锁确保同一个会话的消息发送是串行的
synchronized (session) {
    if (session.isOpen()) { // 再次检查状态
        session.sendMessage(new TextMessage(message));
    }
}

2. 包扫描配置修复

修改QuapApplication.java中的@ComponentScan配置:

@ComponentScan(basePackages = {
    "com.qaup.system", 
    "com.qaup.framework",
    "com.qaup.common",
    "com.qaup.quartz", 
    "com.qaup.generator",
    "com.qaup.collision",
    "com.qaup.websocket",
    "com.qaup.web"         // 新增扫描web包包含验证码控制器
})

3. 前端环境变量配置

修复了前端Vue项目缺少环境变量配置的问题

vue.config.js中添加环境变量默认值:

// 设置环境变量默认值
process.env.VUE_APP_BASE_API = process.env.VUE_APP_BASE_API || '/dev-api'
process.env.VUE_APP_TITLE = process.env.VUE_APP_TITLE || 'QAUP机场预警管理系统'

验证结果

后端验证

curl -X GET "http://localhost:8080/captchaImage" -H "Accept: application/json"

返回结果:

{
  "msg": "操作成功",
  "img": "/9j/4AAQSkZJRgABAgAAAQABAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsL...",
  "code": 200,
  "captchaEnabled": true,
  "uuid": "ec415fe0b23945e1bc7b84bd49cdfa24"
}

服务状态

技术要点

验证码组件配置

  • 使用kaptcha 2.3.3生成验证码
  • 支持数学运算和字符两种类型
  • 配置在CaptchaConfig中,默认数学运算类型
  • 验证码有效期通过Redis管理

Spring Boot包扫描

  • @ComponentScan默认只扫描主类所在包及子包
  • 跨包组件需要显式配置包扫描路径
  • 确保所有业务模块的控制器都被包含

WebSocket线程安全

  • 同一WebSocket会话的消息发送必须串行化
  • 使用synchronized确保线程安全
  • 双重检查会话状态避免异常

解决的问题

  1. 验证码图片404错误 → 正常显示验证码
  2. WebSocket并发异常 → 线程安全发送
  3. 前端环境变量缺失 → 默认值配置
  4. 包扫描配置不全 → 完整包扫描

注意事项

  • 服务重启后验证码功能正常
  • WebSocket消息广播性能有轻微影响加锁
  • 前端代理配置确保API请求正确转发
  • 确保Redis服务运行验证码存储依赖

后续建议

  1. 监控WebSocket消息发送性能影响
  2. 考虑使用消息队列优化高并发场景
  3. 完善前端错误处理和用户提示
  4. 添加验证码接口的健康检查