逻辑

前端操作:

用户在前端页面输入:
原密码(证明是你本人)
新密码(想改成啥)
确认新密码(防止输错)

后台验证:

系统会先检查:
原密码对不对(不对就报错:”账号或密码错误”)

image-20250421220954793新密码和确认密码是否一致(不一致就报错:”确认新密码错误”)

image-20250421220723230如果都正确:
把新密码存到数据库
自动退出登录(让你重新用新密码登录)

image-20250421221134607

安全设计:

改密码必须知道原密码(防止别人乱改)
改完强制重新登录(确保新密码立即生效)
所有角色(管理员/老师/学生)改密码流程都一样

添加接口分支

WebController.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 修改密码
*/
@PutMapping("/updatePassword")
public Result updatePassword(@RequestBody Account account) {
if ("ADMIN".equals(account.getRole())) {
adminService.updatePassword(account);
}
if ("TEACHER".equals(account.getRole())) {
teacherService.updatePassword(account);
}
if (("STUDENT".equals(account.getRole()))) {
studentService.updatePassword(account);
}
return Result.success();
}

TeacherService.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void updatePassword(Account account) {
// ToDo 修改密码逻辑处理 先检查用户是否存在,再修改密码
Teacher dbTeacher = teacherMapper.selectByUsername(account.getUsername());
// 如果用户不存在,抛出异常
if (ObjectUtil.isNull(dbTeacher)) {
throw new CustomException("用户不存在");
}
// 如果密码错误,抛出异常
if (!account.getPassword().equals(dbTeacher.getPassword())) {
throw new CustomException("账号或密码错误");
}
//修改密码
dbTeacher.setPassword(account.getNewPassword());
//调用mapper层的方法,返回结果
teacherMapper.updateById(dbTeacher);
}

StudentService.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void updatePassword(Account account) {
// ToDo 修改密码逻辑处理
// 检查用户是否存在
Student dbStudent = studentMapper.selectByUsername(account.getUsername());
// 如果用户不存在,抛出异常
if (ObjectUtil.isNull(dbStudent)) {
throw new CustomException("用户不存在");
}
// 如果用户存在,修改密码
if (!account.getPassword().equals(dbStudent.getPassword())) {
throw new CustomException("账号或密码错误");
}
// 如果修改成功,返回用户信息
dbStudent.setPassword(account.getNewPassword());
studentMapper.updateById(dbStudent);
}