diff --git a/src/main/java/com/youlai/boot/common/exception/DataPermissionException.java b/src/main/java/com/youlai/boot/common/exception/DataPermissionException.java new file mode 100644 index 00000000..1598e2b1 --- /dev/null +++ b/src/main/java/com/youlai/boot/common/exception/DataPermissionException.java @@ -0,0 +1,28 @@ +package com.youlai.boot.common.exception; + +import lombok.Getter; + +/** + * 数据权限异常 + *

+ * 当数据权限拦截器拼接SQL条件失败时抛出,属于系统级异常,非业务异常。 + * + * @author zc + * @since 2.0.0 + */ +@Getter +public class DataPermissionException extends RuntimeException { + + private final String mappedStatementId; + + public DataPermissionException(String mappedStatementId, String message) { + super(message); + this.mappedStatementId = mappedStatementId; + } + + public DataPermissionException(String mappedStatementId, String message, Throwable cause) { + super(message, cause); + this.mappedStatementId = mappedStatementId; + } + +} diff --git a/src/main/java/com/youlai/boot/common/result/ResultCode.java b/src/main/java/com/youlai/boot/common/result/ResultCode.java index a0833d1d..dd7fa3d2 100644 --- a/src/main/java/com/youlai/boot/common/result/ResultCode.java +++ b/src/main/java/com/youlai/boot/common/result/ResultCode.java @@ -111,6 +111,7 @@ public enum ResultCode implements IResultCode, Serializable { /** 二级宏观错误码:第三方服务具体错误(按号段细分,便于定位是接口不存在/数据库异常等) */ INTERFACE_NOT_EXIST("C0113", "接口不存在"), DATABASE_SERVICE_ERROR("C0300", "数据库服务出错"), + DATABASE_EXECUTION_ERROR("C0310", "数据库执行异常"), DATABASE_EXECUTION_SYNTAX_ERROR("C0313", "数据库执行语法错误"), INTEGRITY_CONSTRAINT_VIOLATION("C0342", "违反了完整性约束"), DATABASE_ACCESS_DENIED("C0351", "演示环境已禁用数据库写入功能,请本地部署修改数据库链接或开启Mock模式进行体验"); diff --git a/src/main/java/com/youlai/boot/framework/web/advice/GlobalExceptionHandler.java b/src/main/java/com/youlai/boot/framework/web/advice/GlobalExceptionHandler.java index fb0e25d6..7be6bbce 100644 --- a/src/main/java/com/youlai/boot/framework/web/advice/GlobalExceptionHandler.java +++ b/src/main/java/com/youlai/boot/framework/web/advice/GlobalExceptionHandler.java @@ -190,13 +190,11 @@ public class GlobalExceptionHandler { @ExceptionHandler(BadSqlGrammarException.class) @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR) public Result handleBadSqlGrammarException(BadSqlGrammarException e) { - log.error(e.getMessage(), e); - String errorMsg = e.getMessage(); - if (StrUtil.isNotBlank(errorMsg) && errorMsg.contains("denied to user")) { + log.error("SQL执行异常, message={}", e.getMessage(), e); + if (StrUtil.isNotBlank(e.getMessage()) && e.getMessage().contains("denied to user")) { return Result.failed(ResultCode.DATABASE_ACCESS_DENIED); - } else { - return Result.failed(e.getMessage()); } + return Result.failed(ResultCode.DATABASE_EXECUTION_ERROR); } /**