忘记密码功能 - MVC架构详细流程图

📱 前端层(MVC → View层:视图展示与用户交互)
忘记密码视图组件(两步交互流程)
【步骤1:获取邮箱验证码】
  • 输入项:注册邮箱(账号)输入框
  • 交互项:“发送邮箱验证码”按钮
  • 提示项:邮箱不存在提示、验证码发送成功提示
【步骤2:重置密码】
  • 输入项:邮箱(回显不可修改)、邮箱验证码输入框、新密码输入框、图片验证码输入框
  • 展示项:图片验证码展示区域(加载后端生成的验证码图片)
  • 交互项:“获取图片验证码”按钮、“重置密码”按钮
  • 提示项:邮箱验证码过期提示、图片验证码过期提示、重置成功提示、重置失败提示
【前端基础逻辑】
  • 表单校验:邮箱格式校验、新密码长度/复杂度校验、输入项非空校验
  • 请求发送:发送邮箱验证码请求、获取图片验证码请求、重置密码请求
  • 页面跳转:重置成功后自动跳转至登录页面
🎯 后端Controller层(MVC → Controller层:请求分发与响应封装)
忘记密码Controller(核心接口)
接口1:/api/forget/send-email-captcha(发送邮箱验证码)
  • 接收参数:用户填写的注册邮箱
  • 核心职责:传递邮箱参数给Service层,接收Service返回结果(邮箱不存在/发送成功),封装统一响应格式
接口2:/api/forget/captcha(获取图片验证码)
  • 核心职责:调用Service生成图片验证码,返回图片流+缓存验证码信息给前端
接口3:/api/forget/reset-password(重置密码核心接口)
  • 接收参数:邮箱、邮箱验证码、新密码、用户输入的图片验证码
  • 核心职责:封装请求参数传递给Service层,接收Service返回结果(各类过期/成功提示),封装统一响应格式

核心特性:无任何业务逻辑,仅负责请求入口管控、参数转发、响应封装

🔧 后端Model层(MVC → Model层:业务逻辑+数据访问)
1. 忘记密码Service(业务逻辑层:核心业务处理)
【业务1:发送邮箱验证码】
  • 步骤1:校验邮箱是否存在
    • 调用DAO层根据邮箱查询用户信息,判断用户是否存在
    • 若不存在:直接返回“该邮箱未注册,请核对后重试”结果
  • 步骤2:生成并存储邮箱验证码
    • 生成随机邮箱验证码(如6位数字),设置过期时间(如15分钟)
    • 将邮箱、验证码、过期时间存入缓存(关联存储,便于后续校验)
  • 步骤3:发送邮箱验证码
    • 调用邮件发送组件,向目标邮箱发送包含验证码的邮件
    • 返回“邮箱验证码已发送,请查收”结果
【业务2:重置密码核心逻辑】
  • 步骤1:图片验证码有效性校验
    • 从缓存中获取对应图片验证码及过期时间
    • 校验:① 输入的图片验证码与缓存验证码是否一致;② 验证码是否已过期
    • 若过期/不匹配:返回“图片验证码已过期/无效,请重新获取”结果
  • 步骤2:邮箱验证码有效性校验
    • 从缓存中根据邮箱查询对应的邮箱验证码及过期时间
    • 校验:① 输入的邮箱验证码与缓存验证码是否一致;② 验证码是否已过期
    • 若过期/不匹配:返回“邮箱验证码已过期/无效,请重新获取”结果
  • 步骤3:密码更新处理
    • 对新密码进行加密处理(与注册时加密规则一致,如MD5/SHA256)
    • 调用DAO层,根据邮箱更新用户密码为加密后的新密码
  • 步骤4:后续清理与结果返回
    • 清理缓存中该邮箱对应的邮箱验证码和图片验证码(避免重复使用)
    • 返回“密码重置成功,请前往登录页面登录”结果

输出:返回各类业务处理结果(邮箱不存在/验证码过期/重置成功/重置失败)

2. 用户DAO(数据访问层:数据库交互)
  • 核心职责:仅负责数据库交互,不包含任何业务逻辑
  • 接口1:findUserByEmail(String email)(根据邮箱查询用户信息)
    • 作用:判断邮箱是否已注册(返回null则未注册,返回用户实体则已注册)
    • 实现:通过MyBatis/JPA执行SQL查询,返回用户ID、邮箱等基础信息
  • 接口2:resetUserPasswordByEmail(String email, String encryptedNewPwd)(更新密码)
    • 作用:根据邮箱将用户密码更新为加密后的新密码
    • 实现:通过MyBatis/JPA执行SQL更新操作,返回受影响行数(用于判断更新是否成功)

依赖:基于MySQL/Oracle等关系型数据库,通过持久化框架实现数据交互

3. 数据存储层 + 辅助功能组件
  • 1. 用户数据库(如MySQL):存储用户基础信息(邮箱、加密密码、用户ID等)
  • 2. 验证码缓存(如Redis/HttpSession):
    • 存储图片验证码:验证码字符串、过期时间(关联用户会话/唯一标识)
    • 存储邮箱验证码:邮箱地址、验证码字符串、过期时间(关联邮箱,便于后续校验)
  • 3. 辅助功能组件:
    • 图片验证码生成组件:生成随机验证码字符串 + 对应图片流(供前端展示)
    • 邮件发送组件(如JavaMail/阿里云邮箱服务):发送包含验证码的邮件到目标邮箱
    • 密码加密组件:对新密码进行加密处理(保证密码存储安全性)