Views: 0
逻辑
前端操作:
用户在前端页面输入: 原密码(证明是你本人) 新密码(想改成啥) 确认新密码(防止输错)
后台验证:
系统会先检查: 原密码对不对(不对就报错:”账号或密码错误”)
新密码和确认密码是否一致(不一致就报错:”确认新密码错误”)
如果都正确: 把新密码存到数据库 自动退出登录(让你重新用新密码登录)
安全设计:
改密码必须知道原密码(防止别人乱改)
改完强制重新登录(确保新密码立即生效)
所有角色(管理员/老师/学生)改密码流程都一样
添加接口分支
WebController.java
/**
* 修改密码
*/
@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
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
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);
}