本文最后更新于 2026年5月21日 晚上
修改个人密码接口的实现
修改个人密码接口的需求
和前台修改用户密码差不多,就少了发送邮件
验证用户是否登录
验证用户是否存在
新密码不能为空
新密码至少8位且符合规格(在dto中有判断)
判断旧密码是否正确
判断新密码和确认密码是否一样
旧密码不能和新密码相同
加密新密码
更新密码
代码实现
在 AdminUserController 中
1 2 3 4 5 6 7
| @PutMapping("/password") @SystemLog(businessName = "修改个人密码接口") @ApiOperation(value = "修改个人密码接口", notes = "修改个人密码", response = String.class) public ResponseResult updateIndividualPassword(@Valid @RequestBody UpdateIndividualPasswordDto updateIndividualPasswordDto) { return adminUserService.updateIndividualPassword(updateIndividualPasswordDto); }
|
创建 UpdateIndividualPasswordDto
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
@Data @AllArgsConstructor @NoArgsConstructor @ApiModel(description = "更新个人密码请求对象") public class UpdateIndividualPasswordDto { @NotBlank(message = "旧密码不能为空") @ApiModelProperty(value = "旧密码", required = true, example = "oldPassword123456") private String oldPassword;
@NotBlank(message = "新密码不能为空") @Pattern(regexp = "^(?=.*[a-z])(?=.*[A-Z])(?=.*\\d)[a-zA-Z\\d@$!%*?&.]{8,20}$", message = "密码必须包含大小写字母和数字,长度8-20位") @ApiModelProperty(value = "新密码", required = true, example = "newPassword123456") private String newPassword;
@NotBlank(message = "确认密码不能为空") @ApiModelProperty(value = "确认密码", required = true, example = "newPassword123456") private String confirmPassword;
}
|
在 AdminUserServiceImpl 中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
| @Override @Transactional public ResponseResult updateIndividualPassword(UpdateIndividualPasswordDto updateIndividualPasswordDto) { Long currentUserId = SecurityUtils.getUserId(); if (currentUserId == null) { return ResponseResult.errorResult(AppHttpCodeEnum.NEED_LOGIN); }
SysUser sysUser = sysUserMapper.selectById(currentUserId); if (sysUser == null) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "用户不存在"); }
if (!StringUtils.hasText(updateIndividualPasswordDto.getNewPassword())) { return ResponseResult.errorResult(AppHttpCodeEnum.PASSWORD_NOT_NULL); }
if (updateIndividualPasswordDto.getNewPassword().length() < 8) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "密码至少8位"); }
if (!passwordEncoder.matches(updateIndividualPasswordDto.getOldPassword(), sysUser.getPassword())) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "旧密码错误"); }
if (!Objects.equals(updateIndividualPasswordDto.getNewPassword(), updateIndividualPasswordDto.getConfirmPassword())) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "两次输入的密码不一致"); }
if (passwordEncoder.matches(updateIndividualPasswordDto.getNewPassword(), sysUser.getPassword())) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "新密码不能与旧密码相同"); }
String encodePassword = passwordEncoder.encode(updateIndividualPasswordDto.getNewPassword());
LambdaUpdateWrapper<SysUser> updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(SysUser::getId, sysUser.getId()) .set(SysUser::getPassword, encodePassword);
int result = sysUserMapper.update(null, updateWrapper);
if (result == 0) { return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR, "密码重置失败"); }
return ResponseResult.okResult(); }
|
PS:该系列只做为作者学习开发项目做的笔记用
不一定符合读者来学习,仅供参考
预告
后续会记录博客的开发过程
每次学习会做一份笔记来进行发表
“一花一世界,一叶一菩提”
版权所有 © 2026 云梦泽
欢迎访问我的个人网站:https://hgt12.github.io/