diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/bo/UpdatePasswordBo.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/bo/UpdatePasswordBo.java new file mode 100644 index 0000000..74837a7 --- /dev/null +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/bo/UpdatePasswordBo.java @@ -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; +} \ No newline at end of file diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/common/exception/BusinessException.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/common/exception/BusinessException.java new file mode 100644 index 0000000..89d0a01 --- /dev/null +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/common/exception/BusinessException.java @@ -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); + } +} \ No newline at end of file diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/UserController.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/UserController.java index 59226af..c86a9fd 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/UserController.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/controller/UserController.java @@ -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 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().eq("username", username)); + userService.updatePassword(user.getId(), updatePasswordBo); + return R.success("密码更新成功"); + } } diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/UserService.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/UserService.java index 660efbf..7f10596 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/UserService.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/UserService.java @@ -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 { /** * 用户注册 @@ -33,4 +35,11 @@ public interface UserService extends IService { * @return Boolean */ Boolean isTokenExpired(Long id,String token); + + /** + * 更新用户密码 + * @param userId 用户ID + * @param updatePasswordBo 包含新旧密码的对象 + */ + void updatePassword(Long userId, UpdatePasswordBo updatePasswordBo); } diff --git a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/UserServiceImpl.java b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/UserServiceImpl.java index 08114ec..7e39cc6 100644 --- a/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/UserServiceImpl.java +++ b/biji-houdaun/src/main/java/com/test/bijihoudaun/service/impl/UserServiceImpl.java @@ -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 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); + } } \ No newline at end of file diff --git a/biji-qianduan/src/api/CommonApi.js b/biji-qianduan/src/api/CommonApi.js index ef362b5..4e1e894 100644 --- a/biji-qianduan/src/api/CommonApi.js +++ b/biji-qianduan/src/api/CommonApi.js @@ -150,3 +150,8 @@ export const toggleRegistration = (enabled) => { export const generateRegistrationCode = () => { return axiosApi.post('/system/registration/generate-code'); }; + +// 更新密码 +export const updatePassword = (data) => { + return axiosApi.put('/api/user/password', data); +}; diff --git a/biji-qianduan/src/components/HomePage.vue b/biji-qianduan/src/components/HomePage.vue index e281d4a..c0c301c 100644 --- a/biji-qianduan/src/components/HomePage.vue +++ b/biji-qianduan/src/components/HomePage.vue @@ -88,6 +88,7 @@