From 58c75ce332ba40e089675a7335db80e5f6c35187 Mon Sep 17 00:00:00 2001 From: luke Date: Thu, 12 Jun 2025 18:12:36 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=BF=AE=E6=94=B9=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../base/application/service/UserAppService.java | 1 + .../application/service/UserAppServiceImpl.java | 5 +++++ .../service/iface/UserAuthDomainSupport.java | 3 +++ .../user/service/iface/UserDomainService.java | 2 ++ .../service/impl/UserAuthDomainSupportImpl.java | 16 ++++++++++++++++ .../user/service/impl/UserDomainServiceImpl.java | 6 ++++++ .../north/controller/UserWriteController.java | 12 ++++++++++++ 7 files changed, 45 insertions(+) diff --git a/src/main/java/com/knowledge/base/application/service/UserAppService.java b/src/main/java/com/knowledge/base/application/service/UserAppService.java index f56ddd8..d1b0c63 100644 --- a/src/main/java/com/knowledge/base/application/service/UserAppService.java +++ b/src/main/java/com/knowledge/base/application/service/UserAppService.java @@ -14,6 +14,7 @@ public interface UserAppService { // 用户注册 boolean registerUser(String username, String password, List roleIds); boolean verifyPassword(String username, String plainText); + boolean changePassword(Long userId, String oldPassword, String newPassword); boolean deleteUser(Long id); boolean updateUser(Long id, UserDTO userDTO); diff --git a/src/main/java/com/knowledge/base/application/service/UserAppServiceImpl.java b/src/main/java/com/knowledge/base/application/service/UserAppServiceImpl.java index ceb625a..cb4256c 100644 --- a/src/main/java/com/knowledge/base/application/service/UserAppServiceImpl.java +++ b/src/main/java/com/knowledge/base/application/service/UserAppServiceImpl.java @@ -45,6 +45,11 @@ public class UserAppServiceImpl implements UserAppService { return userDomainService.verifyPassword(username, plainText); } + @Override + public boolean changePassword(Long userId, String oldPassword, String newPassword) { + return userDomainService.changePassword(userId, oldPassword, newPassword); + } + @Override public boolean deleteUser(Long userId) { return userDomainService.deleteUser(userId); diff --git a/src/main/java/com/knowledge/base/domain/user/service/iface/UserAuthDomainSupport.java b/src/main/java/com/knowledge/base/domain/user/service/iface/UserAuthDomainSupport.java index f202dda..b8bbad0 100644 --- a/src/main/java/com/knowledge/base/domain/user/service/iface/UserAuthDomainSupport.java +++ b/src/main/java/com/knowledge/base/domain/user/service/iface/UserAuthDomainSupport.java @@ -7,8 +7,11 @@ import java.util.Optional; public interface UserAuthDomainSupport { boolean verifyPassword(String username, String plainText); + + boolean changePassword(Long userId, String oldPassword, String newPassword); UserTokenDO createToken(Long userId, long expireMs); boolean isValidToken(String token); void removeToken(String token); Optional findToken(String token); + } diff --git a/src/main/java/com/knowledge/base/domain/user/service/iface/UserDomainService.java b/src/main/java/com/knowledge/base/domain/user/service/iface/UserDomainService.java index f502b70..0809fe3 100644 --- a/src/main/java/com/knowledge/base/domain/user/service/iface/UserDomainService.java +++ b/src/main/java/com/knowledge/base/domain/user/service/iface/UserDomainService.java @@ -18,6 +18,7 @@ public interface UserDomainService { // 认证/Token Optional findToken(String token); boolean verifyPassword(String username, String plainText); + boolean changePassword(Long userId, String oldPassword, String newPassword); UserTokenDO createToken(Long userId, long expireMs); boolean isValidToken(String token); void removeToken(String token); @@ -48,4 +49,5 @@ public interface UserDomainService { List findUserFiles(Long userId); boolean addUserFileAuth(Long userId, Long fileId); boolean removeUserFileAuth(Long userId, Long fileId); + } diff --git a/src/main/java/com/knowledge/base/domain/user/service/impl/UserAuthDomainSupportImpl.java b/src/main/java/com/knowledge/base/domain/user/service/impl/UserAuthDomainSupportImpl.java index 5d44ca3..4d3165e 100644 --- a/src/main/java/com/knowledge/base/domain/user/service/impl/UserAuthDomainSupportImpl.java +++ b/src/main/java/com/knowledge/base/domain/user/service/impl/UserAuthDomainSupportImpl.java @@ -1,5 +1,6 @@ package com.knowledge.base.domain.user.service.impl; +import com.knowledge.base.domain.common.exception.DomainException; import com.knowledge.base.domain.user.model.UserTokenDO; import com.knowledge.base.domain.user.repository.converter.UserTokenDomainConverter; import com.knowledge.base.domain.user.repository.iface.UserRepository; @@ -30,6 +31,21 @@ public class UserAuthDomainSupportImpl implements UserAuthDomainSupport { return inputHash.equals(user.getPassword()); } + @Override + public boolean changePassword(Long userId, String oldPassword, String newPassword) { + Optional userOpt = userRepository.findById(userId); + if(userOpt.isEmpty()) return false; + User user = userOpt.get(); + String oldInputHash = SM3Util.digest(oldPassword); + String newInputHash = SM3Util.digest(newPassword); + if(!oldInputHash.equals(user.getPassword())) { + throw new DomainException("旧密码错误!"); + } + user.setPassword(newInputHash); + userRepository.save(user); + return true; + } + @Override public UserTokenDO createToken(Long userId, long expireMs) { String token = UUID.randomUUID().toString().replace("-", ""); diff --git a/src/main/java/com/knowledge/base/domain/user/service/impl/UserDomainServiceImpl.java b/src/main/java/com/knowledge/base/domain/user/service/impl/UserDomainServiceImpl.java index f95c5b4..d4f501a 100644 --- a/src/main/java/com/knowledge/base/domain/user/service/impl/UserDomainServiceImpl.java +++ b/src/main/java/com/knowledge/base/domain/user/service/impl/UserDomainServiceImpl.java @@ -64,6 +64,12 @@ public class UserDomainServiceImpl implements UserDomainService { public boolean verifyPassword(String username, String plainText) { return userAuthDomainSupport.verifyPassword(username, plainText); } + + @Override + public boolean changePassword(Long userId, String oldPassword, String newPassword) { + return userAuthDomainSupport.changePassword(userId, oldPassword, newPassword); + } + @Override public UserTokenDO createToken(Long userId, long expireMs) { return userAuthDomainSupport.createToken(userId, expireMs); diff --git a/src/main/java/com/knowledge/base/infrastructure/north/controller/UserWriteController.java b/src/main/java/com/knowledge/base/infrastructure/north/controller/UserWriteController.java index 235d9f7..878a3cc 100644 --- a/src/main/java/com/knowledge/base/infrastructure/north/controller/UserWriteController.java +++ b/src/main/java/com/knowledge/base/infrastructure/north/controller/UserWriteController.java @@ -1,5 +1,6 @@ package com.knowledge.base.infrastructure.north.controller; +import cn.hutool.core.map.MapUtil; import com.knowledge.base.application.service.UserAppService; import com.knowledge.base.infrastructure.config.ConstantConfig; import com.knowledge.base.infrastructure.config.DynamicConfig; @@ -63,6 +64,17 @@ public class UserWriteController { return ResponseEntity.ok(userAppService.updateUser(userId, userDTO)); } + @PostMapping("/change-pwd") + public ResponseEntity changeUserPassword(@RequestBody Map body) { + if(MapUtil.isEmpty(body)) { + return ResponseEntity.badRequest().body(Map.of("msg", "参数错误,body为空")); + } + body.getOrDefault("userId", ""); + body.getOrDefault("oldPassword", ""); + body.getOrDefault("newPassword", ""); + return ResponseEntity.ok(userAppService.changePassword(Long.parseLong(body.get("userId")), body.get("oldPassword"), body.get("newPassword"))); + } + @PostMapping("/login") public ResponseEntity login(@RequestBody Map body, HttpServletResponse response) { String username = body.getOrDefault("username", "").trim();