From b29cc352cc5af6eb2a6c68c30da5267c7cbebd2c Mon Sep 17 00:00:00 2001 From: ikmkj Date: Wed, 11 Mar 2026 00:05:46 +0800 Subject: [PATCH] =?UTF-8?q?fix(login):=20=E4=BF=AE=E5=A4=8D=E7=99=BB?= =?UTF-8?q?=E5=BD=95=E9=94=99=E8=AF=AF=E5=A4=84=E7=90=86=E5=B9=B6=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=90=8E=E7=AB=AF=E5=BC=82=E5=B8=B8=E6=8A=9B=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 前端登录失败时添加错误处理标识检查,避免重复显示错误消息 - 后端服务层统一使用BusinessException替代RuntimeException - 用户注册时用户名、邮箱、密码验证失败统一抛出业务异常 - 用户登录时用户名密码错误、账号禁用情况统一抛出业务异常 - 用户查询、更新、删除操作时用户不存在情况统一抛出业务异常 - 密码修改时旧密码错误、密码不一致情况统一抛出业务异常 --- .../service/impl/UserServiceImpl.java | 35 ++++++++++--------- music-qianduan/src/views/Login.vue | 4 ++- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/UserServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/UserServiceImpl.java index 23dff8d..14bfc4e 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/UserServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/UserServiceImpl.java @@ -4,6 +4,7 @@ import cn.dev33.satoken.secure.BCrypt; import cn.dev33.satoken.stp.StpUtil; import com.test.musichouduan.dto.*; import com.test.musichouduan.entity.User; +import com.test.musichouduan.exception.BusinessException; import com.test.musichouduan.repository.*; import com.test.musichouduan.service.UserService; import org.springframework.beans.BeanUtils; @@ -49,17 +50,17 @@ public class UserServiceImpl implements UserService { public UserDTO register(RegisterRequest request) { // 检查用户名是否已存在 if (userRepository.existsByUsername(request.getUsername())) { - throw new RuntimeException("用户名已存在"); + throw new BusinessException(400,"用户名已存在"); } // 检查邮箱是否已存在 if (userRepository.existsByEmail(request.getEmail())) { - throw new RuntimeException("邮箱已存在"); + throw new BusinessException(400,"邮箱已存在"); } // 检查两次密码是否一致 if (!request.getPassword().equals(request.getConfirmPassword())) { - throw new RuntimeException("两次密码不一致"); + throw new BusinessException(400,"两次密码不一致"); } // 创建用户 @@ -83,16 +84,16 @@ public class UserServiceImpl implements UserService { public LoginResultDTO login(LoginRequest request) { // 根据用户名查找用户 User user = userRepository.findByUsername(request.getUsername()) - .orElseThrow(() -> new RuntimeException("用户名或密码错误")); + .orElseThrow(() -> new BusinessException(400,"用户名或密码错误")); // 检查用户状态 if (user.getStatus() == 0) { - throw new RuntimeException("账号已被禁用"); + throw new BusinessException(400,"账号已被禁用"); } // 检查密码 if (!BCrypt.checkpw(request.getPassword(), user.getPassword())) { - throw new RuntimeException("用户名或密码错误"); + throw new BusinessException(400,"用户名或密码错误"); } // 登录 @@ -126,7 +127,7 @@ public class UserServiceImpl implements UserService { // 根据ID查找用户 User user = userRepository.findById(userId) - .orElseThrow(() -> new RuntimeException("用户不存在")); + .orElseThrow(() -> new BusinessException(400,"用户不存在")); // 返回用户DTO return getUserStats(userId); @@ -136,7 +137,7 @@ public class UserServiceImpl implements UserService { public UserDTO getUserById(Long id) { // 根据ID查找用户 User user = userRepository.findById(id) - .orElseThrow(() -> new RuntimeException("用户不存在")); + .orElseThrow(() -> new BusinessException(400,"用户不存在")); // 返回用户DTO return convertToDTO(user); @@ -146,7 +147,7 @@ public class UserServiceImpl implements UserService { public UserDTO getUserByUsername(String username) { // 根据用户名查找用户 User user = userRepository.findByUsername(username) - .orElseThrow(() -> new RuntimeException("用户不存在")); + .orElseThrow(() -> new BusinessException(400,"用户不存在")); // 返回用户DTO return convertToDTO(user); @@ -160,7 +161,7 @@ public class UserServiceImpl implements UserService { // 根据ID查找用户 User user = userRepository.findById(userId) - .orElseThrow(() -> new RuntimeException("用户不存在")); + .orElseThrow(() -> new BusinessException(400,"用户不存在")); // 更新用户信息 if (request.getNickname() != null) { @@ -197,16 +198,16 @@ public class UserServiceImpl implements UserService { // 根据ID查找用户 User user = userRepository.findById(userId) - .orElseThrow(() -> new RuntimeException("用户不存在")); + .orElseThrow(() -> new BusinessException(400,"用户不存在")); // 检查旧密码 if (!BCrypt.checkpw(request.getOldPassword(), user.getPassword())) { - throw new RuntimeException("旧密码错误"); + throw new BusinessException(400,"旧密码错误"); } // 检查两次密码是否一致 if (!request.getNewPassword().equals(request.getConfirmPassword())) { - throw new RuntimeException("两次密码不一致"); + throw new BusinessException(400,"两次密码不一致"); } // 更新密码 @@ -222,7 +223,7 @@ public class UserServiceImpl implements UserService { public UserDTO getUserStats(Long userId) { // 根据ID查找用户 User user = userRepository.findById(userId) - .orElseThrow(() -> new RuntimeException("用户不存在")); + .orElseThrow(() -> new BusinessException(400,"用户不存在")); // 转换为DTO UserDTO userDTO = convertToDTO(user); @@ -274,7 +275,7 @@ public class UserServiceImpl implements UserService { public boolean deleteUser(Long id) { // 检查用户是否存在 if (!userRepository.existsById(id)) { - throw new RuntimeException("用户不存在"); + throw new BusinessException(400,"用户不存在"); } // 删除用户 @@ -288,7 +289,7 @@ public class UserServiceImpl implements UserService { public boolean updateUserStatus(Long id, Integer status) { // 根据ID查找用户 User user = userRepository.findById(id) - .orElseThrow(() -> new RuntimeException("用户不存在")); + .orElseThrow(() -> new BusinessException(400,"用户不存在")); // 更新状态 user.setStatus(status); @@ -341,7 +342,7 @@ public class UserServiceImpl implements UserService { @Override public User getById(Long id) { return userRepository.findById(id) - .orElseThrow(() -> new RuntimeException("用户不存在")); + .orElseThrow(() -> new BusinessException(400,"用户不存在")); } /** diff --git a/music-qianduan/src/views/Login.vue b/music-qianduan/src/views/Login.vue index c8c5897..3d0a3f2 100644 --- a/music-qianduan/src/views/Login.vue +++ b/music-qianduan/src/views/Login.vue @@ -81,7 +81,9 @@ const handleLogin = () => { } } catch (error) { console.error('登录失败:', error) - ElMessage.error(error.message || '登录失败,请检查用户名和密码') + if (!error.__handled) { + ElMessage.error(error.message || '登录失败,请检查用户名和密码') + } } finally { loading.value = false }