feat(user): 添加用户修改密码功能
- 在前端 HomePage 组件中添加修改密码对话框 - 在 API 中添加 updatePassword 接口 - 在后端 UserController 中添加密码更新接口 - 在 UserService 中添加 updatePassword 方法 - 实现密码更新逻辑,包括旧密码验证和新密码加密
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
package com.test.bijihoudaun.bo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
|
||||
@Data
|
||||
@Schema(description = "更新密码业务对象")
|
||||
public class UpdatePasswordBo implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@Schema(description = "旧密码", name = "oldPassword", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String oldPassword;
|
||||
|
||||
@Schema(description = "新密码", name = "newPassword", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private String newPassword;
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package com.test.bijihoudaun.common.exception;
|
||||
|
||||
public class BusinessException extends RuntimeException {
|
||||
|
||||
public BusinessException(String message) {
|
||||
super(message);
|
||||
}
|
||||
|
||||
public BusinessException(String message, Throwable cause) {
|
||||
super(message, cause);
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,6 @@
|
||||
package com.test.bijihoudaun.controller;
|
||||
|
||||
import com.test.bijihoudaun.bo.UpdatePasswordBo;
|
||||
import com.test.bijihoudaun.common.response.R;
|
||||
import com.test.bijihoudaun.entity.User;
|
||||
import com.test.bijihoudaun.service.RegistrationCodeService;
|
||||
@@ -10,11 +11,9 @@ import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.Parameters;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.DeleteMapping;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
@@ -79,4 +78,13 @@ public class UserController {
|
||||
return R.success("Token is valid");
|
||||
}
|
||||
|
||||
@Operation(summary = "更新用户密码")
|
||||
@PutMapping("/password")
|
||||
public R<String> updatePassword(@RequestBody UpdatePasswordBo updatePasswordBo) {
|
||||
UserDetails userDetails = (UserDetails) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
|
||||
String username = userDetails.getUsername();
|
||||
User user = userService.getOne(new com.baomidou.mybatisplus.core.conditions.query.QueryWrapper<User>().eq("username", username));
|
||||
userService.updatePassword(user.getId(), updatePasswordBo);
|
||||
return R.success("密码更新成功");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.test.bijihoudaun.service;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.test.bijihoudaun.entity.User;
|
||||
|
||||
import com.test.bijihoudaun.bo.UpdatePasswordBo;
|
||||
|
||||
public interface UserService extends IService<User> {
|
||||
/**
|
||||
* 用户注册
|
||||
@@ -33,4 +35,11 @@ public interface UserService extends IService<User> {
|
||||
* @return Boolean
|
||||
*/
|
||||
Boolean isTokenExpired(Long id,String token);
|
||||
|
||||
/**
|
||||
* 更新用户密码
|
||||
* @param userId 用户ID
|
||||
* @param updatePasswordBo 包含新旧密码的对象
|
||||
*/
|
||||
void updatePassword(Long userId, UpdatePasswordBo updatePasswordBo);
|
||||
}
|
||||
|
||||
@@ -3,6 +3,8 @@ package com.test.bijihoudaun.service.impl;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.test.bijihoudaun.bo.UpdatePasswordBo;
|
||||
import com.test.bijihoudaun.common.exception.BusinessException;
|
||||
import com.test.bijihoudaun.common.exception.RegistrationException;
|
||||
import com.test.bijihoudaun.entity.User;
|
||||
import com.test.bijihoudaun.mapper.UserMapper;
|
||||
@@ -83,4 +85,18 @@ public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements Us
|
||||
// 修改过期检查逻辑
|
||||
return user != null && new Date().before(user.getTokenEnddata());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePassword(Long userId, UpdatePasswordBo updatePasswordBo) {
|
||||
User user = getById(userId);
|
||||
if (user == null) {
|
||||
throw new BusinessException("用户不存在");
|
||||
}
|
||||
if (!PasswordUtils.verify(updatePasswordBo.getOldPassword(), user.getPassword())) {
|
||||
throw new BusinessException("旧密码不正确");
|
||||
}
|
||||
String newPassword = PasswordUtils.encrypt(updatePasswordBo.getNewPassword());
|
||||
user.setPassword(newPassword);
|
||||
updateById(user);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user