修改异常处理.

This commit is contained in:
lijiahang
2023-07-25 15:02:15 +08:00
parent f01f696d37
commit ee53ec6486
8 changed files with 49 additions and 54 deletions

View File

@@ -6,7 +6,12 @@ import com.orion.lang.utils.Exceptions;
import com.orion.lang.utils.Strings; import com.orion.lang.utils.Strings;
/** /**
* 错误码 * 用于定义错误码
* <p>
* 1. http 通用 status
* 2. 前端需要特殊处理
* 3. @ExceptionHandler 全局异常
* 其他情况可以定义在 ExceprionMessage 中
* *
* @author Jiahang Li * @author Jiahang Li
* @version 1.0.0 * @version 1.0.0
@@ -15,6 +20,8 @@ import com.orion.lang.utils.Strings;
@SuppressWarnings("ALL") @SuppressWarnings("ALL")
public enum ErrorCode implements CodeInfo { public enum ErrorCode implements CodeInfo {
// -------------------- http message --------------------
BAD_REQUEST(400, "参数验证失败"), BAD_REQUEST(400, "参数验证失败"),
UNAUTHORIZED(401, "当前认证信息已失效, 请重新登录"), UNAUTHORIZED(401, "当前认证信息已失效, 请重新登录"),
@@ -27,7 +34,7 @@ public enum ErrorCode implements CodeInfo {
REQUEST_TIMEOUT(408, "处理超时"), REQUEST_TIMEOUT(408, "处理超时"),
CONFLICT(409, "状态发生改变, 请刷新后重试"), CONFLICT(409, "数据状态发生改变, 请刷新后重试"),
PAYLOAD_TOO_LARGE(413, "请求过大"), PAYLOAD_TOO_LARGE(413, "请求过大"),
@@ -45,10 +52,6 @@ public enum ErrorCode implements CodeInfo {
USER_LOCKED(702, "当前用户已被锁定"), USER_LOCKED(702, "当前用户已被锁定"),
ROLE_PRESENT(703, "角色 [{}] 不存在"),
DATA_ALTER(704, "数据发生改变, 请刷新后重试"),
// -------------------- 自定义 - 通用 -------------------- // -------------------- 自定义 - 通用 --------------------
NETWORK_FLUCTUATION(900, "当前环境网路波动"), NETWORK_FLUCTUATION(900, "当前环境网路波动"),

View File

@@ -31,6 +31,8 @@ public interface ErrorMessage {
String ROLE_ABSENT = "角色不存在"; String ROLE_ABSENT = "角色不存在";
String ROLE_CODE_ABSENT = "角色 [{}] 不存在";
String INVALID_PARENT_MENU = "所选父菜单不合法"; String INVALID_PARENT_MENU = "所选父菜单不合法";
String PARENT_MENU_ABSENT = "父菜单不存在"; String PARENT_MENU_ABSENT = "父菜单不存在";

View File

@@ -1,5 +1,6 @@
package com.orion.ops.module.infra.enums; package com.orion.ops.module.infra.enums;
import com.orion.ops.framework.common.constant.ErrorCode;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
@@ -45,4 +46,19 @@ public enum UserStatusEnum {
return null; return null;
} }
/**
* 检查用户状态
*
* @param status status
*/
public static void checkUserStatus(Integer status) {
if (UserStatusEnum.DISABLED.getStatus().equals(status)) {
// 禁用状态
throw ErrorCode.USER_DISABLED.exception();
} else if (UserStatusEnum.LOCKED.getStatus().equals(status)) {
// 锁定状态
throw ErrorCode.USER_LOCKED.exception();
}
}
} }

View File

@@ -54,7 +54,7 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
// 获取登陆信息 // 获取登陆信息
LoginUser user = authenticationService.getLoginUser(tokenInfo.getId()); LoginUser user = authenticationService.getLoginUser(tokenInfo.getId());
// 检查用户状态 // 检查用户状态
this.checkUserStatus(user); UserStatusEnum.checkUserStatus(user.getStatus());
return user; return user;
} }
@@ -78,17 +78,4 @@ public class SecurityFrameworkServiceImpl implements SecurityFrameworkService {
} }
} }
/**
* 检查用户状态
*
* @param user user
*/
private void checkUserStatus(LoginUser user) {
if (UserStatusEnum.DISABLED.getStatus().equals(user.getStatus())) {
throw ErrorCode.USER_DISABLED.exception();
} else if (UserStatusEnum.LOCKED.getStatus().equals(user.getStatus())) {
throw ErrorCode.USER_LOCKED.exception();
}
}
} }

View File

@@ -8,7 +8,6 @@ import com.orion.lang.utils.Exceptions;
import com.orion.lang.utils.collect.Lists; import com.orion.lang.utils.collect.Lists;
import com.orion.lang.utils.crypto.Signatures; import com.orion.lang.utils.crypto.Signatures;
import com.orion.ops.framework.common.constant.Const; import com.orion.ops.framework.common.constant.Const;
import com.orion.ops.framework.common.constant.ErrorCode;
import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.constant.ErrorMessage;
import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.framework.common.security.LoginUser;
import com.orion.ops.framework.common.utils.CryptoUtils; import com.orion.ops.framework.common.utils.CryptoUtils;
@@ -75,7 +74,7 @@ public class AuthenticationServiceImpl implements AuthenticationService {
boolean passwordCorrect = this.checkPassword(request, user); boolean passwordCorrect = this.checkPassword(request, user);
Valid.isTrue(passwordCorrect, ErrorMessage.USERNAME_PASSWORD_ERROR); Valid.isTrue(passwordCorrect, ErrorMessage.USERNAME_PASSWORD_ERROR);
// 检查用户状态 // 检查用户状态
this.checkUserStatus(user.getStatus()); UserStatusEnum.checkUserStatus(user.getStatus());
// 设置上次登录时间 // 设置上次登录时间
this.setLastLoginTime(user.getId()); this.setLastLoginTime(user.getId());
// 检查用户缓存 // 检查用户缓存
@@ -239,21 +238,6 @@ public class AuthenticationServiceImpl implements AuthenticationService {
return false; return false;
} }
/**
* 检查用户状态
*
* @param status status
*/
private void checkUserStatus(Integer status) {
if (UserStatusEnum.DISABLED.getStatus().equals(status)) {
// 禁用状态
throw ErrorCode.USER_DISABLED.exception();
} else if (UserStatusEnum.LOCKED.getStatus().equals(status)) {
// 锁定状态
throw ErrorCode.USER_LOCKED.exception();
}
}
/** /**
* 设置最后登录时间 * 设置最后登录时间
* *

View File

@@ -1,6 +1,7 @@
package com.orion.ops.module.infra.service.impl; package com.orion.ops.module.infra.service.impl;
import com.orion.lang.utils.collect.Lists; import com.orion.lang.utils.collect.Lists;
import com.orion.ops.framework.common.constant.Const;
import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.framework.common.security.LoginUser;
import com.orion.ops.framework.security.core.utils.SecurityUtils; import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.module.infra.convert.SystemMenuConvert; import com.orion.ops.module.infra.convert.SystemMenuConvert;
@@ -156,10 +157,10 @@ public class PermissionServiceImpl implements PermissionService {
// 查询角色菜单 // 查询角色菜单
Stream<SystemMenuCacheDTO> mergeStream; Stream<SystemMenuCacheDTO> mergeStream;
if (RoleDefine.containsAdmin(roles)) { if (RoleDefine.containsAdmin(roles)) {
// 管理员拥有全部权限 // 管理员拥有全部菜单
mergeStream = menuCache.stream(); mergeStream = menuCache.stream();
} else { } else {
// 当前用户所适配的角色 // 当前用户所适配的角色菜单
mergeStream = roles.stream() mergeStream = roles.stream()
.map(roleMenuCache::get) .map(roleMenuCache::get)
.filter(Objects::nonNull) .filter(Objects::nonNull)
@@ -187,6 +188,11 @@ public class PermissionServiceImpl implements PermissionService {
if (roles.isEmpty()) { if (roles.isEmpty()) {
permissions = Lists.empty(); permissions = Lists.empty();
} else { } else {
if (RoleDefine.containsAdmin(roles)) {
// 管理员拥有全部权限
permissions = Lists.of(Const.ASTERISK);
} else {
// 当前用户所适配的角色的权限
permissions = roles.stream() permissions = roles.stream()
.map(roleMenuCache::get) .map(roleMenuCache::get)
.filter(Objects::nonNull) .filter(Objects::nonNull)
@@ -197,6 +203,7 @@ public class PermissionServiceImpl implements PermissionService {
.distinct() .distinct()
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
}
// 组装数据 // 组装数据
return UserPermissionVO.builder() return UserPermissionVO.builder()
.user(user) .user(user)

View File

@@ -60,7 +60,7 @@ public class SystemRoleMenuServiceImpl implements SystemRoleMenuService {
// 查询菜单列表 // 查询菜单列表
List<SystemMenuDO> menuList = systemMenuDAO.selectBatchIds(menuIdList); List<SystemMenuDO> menuList = systemMenuDAO.selectBatchIds(menuIdList);
if (menuIdList.size() != menuList.size()) { if (menuIdList.size() != menuList.size()) {
throw ErrorCode.DATA_ALTER.exception(); throw ErrorCode.CONFLICT.exception();
} }
// 查询角色菜单 // 查询角色菜单
List<Long> beforeMenuIdList = systemRoleMenuDAO.of() List<Long> beforeMenuIdList = systemRoleMenuDAO.of()

View File

@@ -1,7 +1,6 @@
package com.orion.ops.module.infra.service.impl; package com.orion.ops.module.infra.service.impl;
import com.orion.lang.utils.collect.Lists; import com.orion.lang.utils.collect.Lists;
import com.orion.ops.framework.common.constant.ErrorCode;
import com.orion.ops.framework.common.constant.ErrorMessage; import com.orion.ops.framework.common.constant.ErrorMessage;
import com.orion.ops.framework.common.security.LoginUser; import com.orion.ops.framework.common.security.LoginUser;
import com.orion.ops.framework.common.utils.Valid; import com.orion.ops.framework.common.utils.Valid;
@@ -75,10 +74,7 @@ public class SystemUserRoleServiceImpl implements SystemUserRoleService {
.map(SystemRoleDO::getCode) .map(SystemRoleDO::getCode)
.collect(Collectors.toList()); .collect(Collectors.toList());
for (String roleCode : roleCodeList) { for (String roleCode : roleCodeList) {
// 角色不存在 Valid.in(roleCode, userRoleCodes, ErrorMessage.ROLE_CODE_ABSENT, roleCode);
if (!userRoleCodes.contains(roleCode)) {
throw ErrorCode.ROLE_PRESENT.exception(roleCode);
}
} }
} }
// 删除用户角色关联 // 删除用户角色关联