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();