Files
hzdyjs/docs/开发文档/API/学生密码重置API.md
T
“wuzhen”andCursor da8d332fac fix(security): 修复网安扫描相关严重/高危/中危漏洞并加固学生密码重置
关闭工作流 SpEL 命令执行与社团活动 SQL 注入,补齐越权、调试接口、登录喷洒和异常回显等问题;学生密码改为随机临时密码,Web/移动端支持复制。

Constraint: 流程发起/办理接口保持仅登录校验,避免影响请假审批
Rejected: 开启验证码 | Web/移动端登录页均未实现,开启会导致无法登录
Confidence: high
Scope-risk: broad
Not-tested: 生产环境与社团社长/指导老师视角
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-26 13:44:51 +08:00

4.9 KiB
Raw Blame History

学生密码重置 API 接口文档

模块概述

模块名称:Student Password Reset / 学生密码重置
基础路径:/studentMsg/studentMsg
版本:v1.0
负责人:学工模块
更新时间:2026-10-26

模块功能

学工老师按学号查询学生基本信息后,一键将对应学生登录账号密码重置为服务端随机生成的临时密码(2026-10-26 安全整改:取消固定默认密码)。
不复用 system:user:resetPwd,避免把系统用户管理权下放给学工老师。

核心约束:

  • 仅允许重置 sys_user.account_type = '2'(学生账号)
  • 要求 user_id = xg_student_msg.id,且 user_name 与学号一致(若有用户名)
  • 临时密码由服务端 SecureRandom 生成(10 位,含大小写、数字、特殊字符),前端不可传入自定义密码
  • 数据范围:超管、校级账号(无学院)可操作全部学生;学院账号只能查询/重置本学院(或一年级代理学院)的学生
  • 重置后立即踢下线该学生的所有在线会话
  • 操作日志不记录响应体,临时密码不落库日志

临时密码:仅在本次接口响应 data 中返回一次,由老师当面告知学生,学生登录后应自行修改。

权限说明

权限标识 说明
studentMsg:studentPwdReset:list Web 菜单页可见
studentMsg:studentPwdReset:query 按学号查询
studentMsg:studentPwdReset:reset 确认重置密码
student:pwdreset:listapp 移动端首页入口可见

菜单脚本:backend/script/sql/update/update_20261026_student_pwd_reset_menu.sql


接口概览

接口名称 HTTP 方法 路径 权限要求 功能描述
按学号查询学生 GET /studentMsg/studentMsg/queryByStudentNo/{studentNo} studentMsg:studentPwdReset:query 返回姓名、学号、班级、班主任
重置学生密码 PUT /studentMsg/studentMsg/resetStudentPassword/{studentNo} studentMsg:studentPwdReset:reset 重置为随机临时密码

详细接口说明

1. 按学号查询学生(重置密码页)

  • 接口路径:GET /studentMsg/studentMsg/queryByStudentNo/{studentNo}
  • 权限标识:studentMsg:studentPwdReset:query
  • 功能描述:按学号查询学生档案,用于重置前确认身份;班主任姓名优先取学生档案,为空时回退班级表

路径参数

参数名 类型 必填 说明
studentNo string 是 学号

成功响应

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "id": 1234567890123456789,
    "studentNo": "202513063048",
    "name": "张三",
    "className": "计应2401",
    "classTeacherName": "李老师"
  }
}

错误场景

场景 提示
学号为空 学号不能为空
学号不存在 未找到学号对应的学生信息
无权限 403

2. 重置学生密码

  • 接口路径:PUT /studentMsg/studentMsg/resetStudentPassword/{studentNo}
  • 权限标识:studentMsg:studentPwdReset:reset
  • 功能描述:将学号对应学生登录密码重置为随机临时密码并踢下线;写操作日志「重置学生密码」(不记录响应)
  • 防重复提交:@RepeatSubmit

路径参数

参数名 类型 必填 说明
studentNo string 是 学号

请求体

无。临时密码由服务端随机生成并 BCrypt 后写入,不允许客户端传密。

成功响应

{
  "code": 200,
  "msg": "操作成功",
  "data": "Abcdef@123"
}

错误场景

场景 提示
学号不存在 未找到学号对应的学生信息
无登录账号 该学生没有登录账号,无法重置密码
非学生账号 该账号不是学生账号,禁止重置
学号与登录名不一致 学号与登录账号不一致,请联系管理员
非本学院学生 只能操作本学院的学生
无权限 403

前端与移动端

端 路径 / 入口
Web web/src/views/xg/xsjcxx/studentMsg/studentPwdReset/index.vue
Web API web/src/api/xg/xsjcxx/studentMsg/studentMsg/index.ts → queryStudentForPwdReset / resetStudentPassword
移动端页面 mobile/src/pages/xg/xsjcxx/studentPwdReset/index.vue
移动端 API mobile/src/api/studentPwdReset.js
移动端首页 学工管理 →「重置学生密码」(student:pwdreset:listapp)

验收要点

  1. 有权限账号:学号查得到 → 重置成功 → 该学号可用默认密码登录
  2. 无权限账号:接口 403
  3. 不存在学号 / 无用户 / 非学生账号:友好错误,不改密
  4. Web、移动端流程一致:输入学号 → 查询 → 确认 → 重置