新增密码修改代码 #125

Merged
hnu202326010106 merged 1 commits from wanglei_branch into develop 2 weeks ago

@ -176,4 +176,34 @@ public class AdminController {
}
}
/**
*
*
*/
@PostMapping("/password/update")
@PreAuthorize("isAuthenticated()") // 登录即可访问
@Operation(summary = "修改密码", description = "当前登录管理员修改自己的密码(需验证原密码)")
public ResponseEntity<ResultVO<Void>> updatePassword(
@RequestParam String oldPassword,
@RequestParam String newPassword,
Authentication authentication) {
try {
// 1. 获取当前登录用户名
String currentUsername = authentication.getName();
// 2. 验证原密码并更新新密码
boolean success = adminService.updatePassword(currentUsername, oldPassword, newPassword);
if (success) {
return ResponseEntity.ok(ResultVO.success(null, "密码修改成功"));
} else {
return ResponseEntity.ok(ResultVO.error(400, "原密码验证失败"));
}
} catch (IllegalArgumentException e) {
// 处理新密码格式错误等参数问题
return ResponseEntity.ok(ResultVO.error(400, e.getMessage()));
} catch (Exception e) {
return ResponseEntity.ok(ResultVO.error(500, "密码修改失败:" + e.getMessage()));
}
}
}

@ -144,4 +144,47 @@ public class AdminService {
return adminRepository.findByAdminName(username);
}
/**
*
* @param username
* @param oldPassword
* @param newPassword
* @return
*/
public boolean updatePassword(String username, String oldPassword, String newPassword) {
// 1. 校验参数合法性
if (oldPassword == null || oldPassword.trim().isEmpty()) {
throw new IllegalArgumentException("原密码不能为空");
}
if (newPassword == null || newPassword.trim().isEmpty()) {
throw new IllegalArgumentException("新密码不能为空");
}
if (oldPassword.equals(newPassword)) {
throw new IllegalArgumentException("新密码不能与原密码一致");
}
// 可选:新密码复杂度校验(增强安全性,根据项目需求调整)
if (newPassword.length() < 6 || newPassword.length() > 20) {
throw new IllegalArgumentException("新密码长度必须在6-20位之间");
}
// 2. 根据用户名查询当前管理员信息
Admin existingAdmin = adminRepository.findByAdminName(username)
.orElseThrow(() -> new RuntimeException("管理员不存在"));
// 3. 验证原密码是否正确(使用项目已有的 PasswordEncoder 进行匹配)
boolean oldPasswordMatch = passwordEncoder.matches(oldPassword, existingAdmin.getPassword());
if (!oldPasswordMatch) {
return false; // 原密码错误,返回修改失败
}
// 4. 加密新密码并更新管理员信息
String encodedNewPassword = passwordEncoder.encode(newPassword);
existingAdmin.setPassword(encodedNewPassword);
existingAdmin.setUpdatedTime(LocalDateTime.now()); // 更新修改时间,保持与其他方法一致
// 5. 保存到数据库
adminRepository.save(existingAdmin);
return true;
}
}
Loading…
Cancel
Save