From 2e512362e7bc06610241707e87a7e412161ee3cb Mon Sep 17 00:00:00 2001 From: wanglei <3085637232@qq.com> Date: Sat, 27 Dec 2025 19:23:09 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AF=86=E7=A0=81=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../water/controller/web/AdminController.java | 30 +++++++++++++ .../campus/water/service/AdminService.java | 43 +++++++++++++++++++ 2 files changed, 73 insertions(+) diff --git a/src/main/java/com/campus/water/controller/web/AdminController.java b/src/main/java/com/campus/water/controller/web/AdminController.java index 7a81a40..26af783 100644 --- a/src/main/java/com/campus/water/controller/web/AdminController.java +++ b/src/main/java/com/campus/water/controller/web/AdminController.java @@ -176,4 +176,34 @@ public class AdminController { } } + /** + * 管理员密码修改 + * 允许当前登录管理员修改自己的密码(需验证原密码) + */ + @PostMapping("/password/update") + @PreAuthorize("isAuthenticated()") // 登录即可访问 + @Operation(summary = "修改密码", description = "当前登录管理员修改自己的密码(需验证原密码)") + public ResponseEntity> 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())); + } + } + } \ No newline at end of file diff --git a/src/main/java/com/campus/water/service/AdminService.java b/src/main/java/com/campus/water/service/AdminService.java index 634f626..5a481f2 100644 --- a/src/main/java/com/campus/water/service/AdminService.java +++ b/src/main/java/com/campus/water/service/AdminService.java @@ -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; + } + } \ No newline at end of file -- 2.34.1