diff --git a/orion-ops-framework/orion-ops-common/pom.xml b/orion-ops-framework/orion-ops-common/pom.xml
index 90974e2f..efbf7aad 100644
--- a/orion-ops-framework/orion-ops-common/pom.xml
+++ b/orion-ops-framework/orion-ops-common/pom.xml
@@ -52,6 +52,12 @@
transmittable-thread-local
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
+
org.springframework.boot
diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java
index 2f9d8005..c4404f16 100644
--- a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java
+++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorCode.java
@@ -67,6 +67,8 @@ public enum ErrorCode implements CodeInfo {
VCS_OPETATOR_ERROR(714, "仓库操作执行失败"),
+ DIABLED_ERROR(715, "数据已被禁用"),
+
;
ErrorCode(int code, String message) {
diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java
new file mode 100644
index 00000000..455716f3
--- /dev/null
+++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/constant/ErrorMessage.java
@@ -0,0 +1,14 @@
+package com.orion.ops.framework.common.constant;
+
+/**
+ * 错误信息
+ *
+ * @author Jiahang Li
+ * @version 1.0.0
+ * @since 2023/7/7 18:51
+ */
+public interface ErrorMessage {
+
+ String PARAM_MISSING = "{} 不能为空";
+
+}
diff --git a/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/utils/CryptoUtils.java b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/utils/CryptoUtils.java
new file mode 100644
index 00000000..363e7192
--- /dev/null
+++ b/orion-ops-framework/orion-ops-common/src/main/java/com/orion/ops/framework/common/utils/CryptoUtils.java
@@ -0,0 +1,121 @@
+package com.orion.ops.framework.common.utils;
+
+import com.orion.lang.utils.crypto.symmetric.SymmetricCrypto;
+
+/**
+ * 加密工具类
+ *
+ * @author Jiahang Li
+ * @version 1.0.0
+ * @since 2023/7/8 0:05
+ */
+public class CryptoUtils {
+
+ /**
+ * 加密器 供 framework 赋值
+ */
+ public static SymmetricCrypto delegate;
+
+ /**
+ * 加密
+ *
+ * @param plain 明文
+ * @return 密文
+ */
+ public static byte[] encrypt(byte[] plain) {
+ return delegate.encrypt(plain);
+ }
+
+ /**
+ * 加密
+ *
+ * @param plain 明文
+ * @return 密文
+ */
+ public static byte[] encrypt(String plain) {
+ return delegate.encrypt(plain);
+ }
+
+ /**
+ * 加密
+ *
+ * @param plain 明文
+ * @return 密文
+ */
+ public static String encryptAsString(String plain) {
+ return delegate.encryptAsString(plain);
+ }
+
+ /**
+ * 加密
+ *
+ * @param plain 明文
+ * @return 密文
+ */
+ public static String encryptAsString(byte[] plain) {
+ return delegate.encryptAsString(plain);
+ }
+
+ /**
+ * 解密
+ *
+ * @param text 密文
+ * @return 明文
+ */
+ public static byte[] decrypt(byte[] text) {
+ return delegate.decrypt(text);
+ }
+
+ /**
+ * 解密
+ *
+ * @param text 密文
+ * @return 明文
+ */
+ public static byte[] decrypt(String text) {
+ return delegate.decrypt(text);
+ }
+
+ /**
+ * 解密
+ *
+ * @param text 密文
+ * @return 明文
+ */
+ public static String decryptAsString(String text) {
+ return delegate.decryptAsString(text);
+ }
+
+ /**
+ * 解密
+ *
+ * @param text 密文
+ * @return 明文
+ */
+ public static String decryptAsString(byte[] text) {
+ return delegate.decryptAsString(text);
+ }
+
+ /**
+ * 验证加密结果
+ *
+ * @param plain 明文
+ * @param text 密文
+ * @return 是否成功
+ */
+ public static boolean verify(String plain, String text) {
+ return delegate.verify(plain, text);
+ }
+
+ /**
+ * 验证加密结果
+ *
+ * @param plain 明文
+ * @param text 密文
+ * @return 是否成功
+ */
+ public static boolean verify(byte[] plain, byte[] text) {
+ return delegate.verify(plain, text);
+ }
+
+}
diff --git a/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java b/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java
index 5a9671d2..7e029630 100644
--- a/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java
+++ b/orion-ops-framework/orion-ops-spring-boot-starter-web/src/main/java/com/orion/ops/framework/web/core/handler/GlobalExceptionHandler.java
@@ -7,24 +7,31 @@ import com.orion.lang.exception.argument.HttpWrapperException;
import com.orion.lang.exception.argument.InvalidArgumentException;
import com.orion.lang.exception.argument.RpcWrapperException;
import com.orion.lang.utils.Exceptions;
+import com.orion.lang.utils.Strings;
import com.orion.ops.framework.common.constant.ErrorCode;
+import com.orion.ops.framework.common.constant.ErrorMessage;
import lombok.extern.slf4j.Slf4j;
import org.apache.poi.EncryptedDocumentException;
import org.springframework.dao.DataAccessResourceFailureException;
import org.springframework.http.converter.HttpMessageNotReadableException;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.validation.BindException;
+import org.springframework.validation.FieldError;
import org.springframework.web.HttpRequestMethodNotSupportedException;
-import org.springframework.web.bind.MethodArgumentNotValidException;
+import org.springframework.web.bind.MissingRequestValueException;
+import org.springframework.web.bind.MissingServletRequestParameterException;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException;
import org.springframework.web.multipart.MaxUploadSizeExceededException;
-import javax.servlet.http.HttpServletRequest;
+import javax.validation.ConstraintViolation;
+import javax.validation.ConstraintViolationException;
+import javax.validation.ValidationException;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.sql.SQLException;
+import java.util.Objects;
/**
* 全局异常处理器
@@ -37,21 +44,64 @@ import java.sql.SQLException;
@RestControllerAdvice
public class GlobalExceptionHandler {
+ // -------------------- 默认 --------------------
+
@ExceptionHandler(value = Exception.class)
- public HttpWrapper> defaultExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("defaultExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> defaultExceptionHandler(Exception ex) {
+ log.error("defaultExceptionHandler", ex);
return ErrorCode.INTERNAL_SERVER_ERROR.wrapper(ex.getMessage());
}
- @ExceptionHandler(value = ApplicationException.class)
- public HttpWrapper> applicationExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("applicationExceptionHandler url: {}", request.getRequestURI(), ex);
- return HttpWrapper.error(ex.getMessage());
+ // -------------------- http 异常 --------------------
+
+ @ExceptionHandler(value = {
+ MethodArgumentTypeMismatchException.class,
+ HttpMessageNotReadableException.class,
+ ValidationException.class,
+ MissingRequestValueException.class
+ })
+ public HttpWrapper> badRequestExceptionHandler(Exception ex) {
+ log.error("badRequestExceptionHandler", ex);
+ return ErrorCode.BAD_REQUEST.getWrapper();
}
+ @ExceptionHandler(value = MissingServletRequestParameterException.class)
+ public HttpWrapper> missingServletRequestParameterExceptionHandler(MissingServletRequestParameterException ex) {
+ log.error("missingServletRequestParameterExceptionHandler", ex);
+ return ErrorCode.BAD_REQUEST.wrapper().msg(Strings.format(ErrorMessage.PARAM_MISSING, ex.getParameterName()));
+ }
+
+ @ExceptionHandler(value = BindException.class)
+ public HttpWrapper> paramBindExceptionHandler(BindException ex) {
+ log.error("paramBindExceptionHandler", ex);
+ FieldError error = ex.getFieldError();
+ return ErrorCode.BAD_REQUEST.wrapper().msg(Objects.requireNonNull(error).getDefaultMessage());
+ }
+
+ @ExceptionHandler(value = ConstraintViolationException.class)
+ public HttpWrapper> constraintViolationExceptionHandler(ConstraintViolationException ex) {
+ log.error("constraintViolationExceptionHandler", ex);
+ ConstraintViolation> constraintViolation = ex.getConstraintViolations().iterator().next();
+ return ErrorCode.BAD_REQUEST.wrapper().msg(Objects.requireNonNull(constraintViolation).getMessage());
+ }
+
+ @ExceptionHandler(value = {HttpRequestMethodNotSupportedException.class})
+ public HttpWrapper> httpRequestMethodNotSupportedExceptionHandler(Exception ex) {
+ log.error("httpRequestMethodNotSupportedExceptionHandler", ex);
+ return ErrorCode.METHOD_NOT_ALLOWED.getWrapper();
+ }
+
+ @ExceptionHandler(value = MaxUploadSizeExceededException.class)
+ public HttpWrapper> maxUploadSizeExceededExceptionHandler(MaxUploadSizeExceededException ex) {
+ log.error("maxUploadSizeExceededExceptionHandler", ex);
+ return ErrorCode.PAYLOAD_TOO_LARGE.wrapper(ex.getMessage());
+ }
+
+ // -------------------- 框架异常 --------------------
+
@ExceptionHandler(value = DataAccessResourceFailureException.class)
- public HttpWrapper> dataAccessResourceFailureExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("dataAccessResourceFailureExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> dataAccessResourceFailureExceptionHandler(Exception ex) {
+ log.error("dataAccessResourceFailureExceptionHandler", ex);
return ErrorCode.NETWORK_FLUCTUATION.getWrapper();
}
@@ -61,53 +111,75 @@ public class GlobalExceptionHandler {
throw ex;
}
- // FIXME @validated
- @ExceptionHandler(value = {HttpMessageNotReadableException.class, MethodArgumentTypeMismatchException.class,
- HttpMessageNotReadableException.class, MethodArgumentNotValidException.class, BindException.class})
- public HttpWrapper> httpRequestParameterExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("httpRequestParameterExceptionHandler url: {}", request.getRequestURI(), ex);
- return ErrorCode.BAD_REQUEST.getWrapper();
- }
+ // -------------------- 业务异常 --------------------
- @ExceptionHandler(value = {HttpRequestMethodNotSupportedException.class})
- public HttpWrapper> httpRequestMethodNotSupportedExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("httpRequestMethodNotSupportedExceptionHandler url: {}", request.getRequestURI(), ex);
- return ErrorCode.METHOD_NOT_ALLOWED.getWrapper();
- }
-
- @ExceptionHandler(value = {HttpRequestException.class})
- public HttpWrapper> httpApiRequestExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("httpApiRequestExceptionHandler url: {}", request.getRequestURI(), ex);
- return ErrorCode.HTTP_API.getWrapper();
- }
-
- @ExceptionHandler(value = {InvalidArgumentException.class, IllegalArgumentException.class, DisabledException.class})
- public HttpWrapper> invalidArgumentExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("invalidArgumentExceptionHandler url: {}", request.getRequestURI(), ex);
+ @ExceptionHandler(value = {
+ InvalidArgumentException.class,
+ IllegalArgumentException.class
+ })
+ public HttpWrapper> invalidArgumentExceptionHandler(Exception ex) {
+ log.error("invalidArgumentExceptionHandler", ex);
return ErrorCode.BAD_REQUEST.wrapper().msg(ex.getMessage());
}
- @ExceptionHandler(value = {IOException.class, IORuntimeException.class})
- public HttpWrapper> ioExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("ioExceptionHandler url: {}", request.getRequestURI(), ex);
+ @ExceptionHandler(value = {
+ TimeoutException.class,
+ java.util.concurrent.TimeoutException.class
+ })
+ public HttpWrapper> timeoutExceptionHandler(Exception ex) {
+ log.error("timeoutExceptionHandler", ex);
+ return ErrorCode.REQUEST_TIMEOUT.wrapper(ex.getMessage());
+ }
+
+ @ExceptionHandler(value = {
+ InterruptedException.class,
+ InterruptedRuntimeException.class,
+ InterruptedIOException.class
+ })
+ public HttpWrapper> interruptExceptionHandler(Exception ex) {
+ log.error("interruptExceptionHandler", ex);
+ return ErrorCode.INTERRUPT_ERROR.wrapper(ex.getMessage());
+ }
+
+ @ExceptionHandler(value = {
+ IOException.class,
+ IORuntimeException.class
+ })
+ public HttpWrapper> ioExceptionHandler(Exception ex) {
+ log.error("ioExceptionHandler", ex);
return ErrorCode.IO_EXCEPTION.wrapper(ex.getMessage());
}
@ExceptionHandler(value = SQLException.class)
- public HttpWrapper> sqlExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("sqlExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> sqlExceptionHandler(Exception ex) {
+ log.error("sqlExceptionHandler", ex);
return ErrorCode.SQL_EXCEPTION.getWrapper();
}
- @ExceptionHandler(value = {SftpException.class, com.jcraft.jsch.SftpException.class})
- public HttpWrapper> sftpExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("sftpExceptionHandler url: {}", request.getRequestURI(), ex);
+ @ExceptionHandler(value = ApplicationException.class)
+ public HttpWrapper> applicationExceptionHandler(Exception ex) {
+ log.error("applicationExceptionHandler", ex);
+ return HttpWrapper.error(ex.getMessage());
+ }
+
+ @ExceptionHandler(value = DisabledException.class)
+ public HttpWrapper> disabledExceptionHandler(Exception ex) {
+ log.error("disabledExceptionHandler", ex);
+ return ErrorCode.DIABLED_ERROR.getWrapper();
+ }
+
+ @ExceptionHandler(value = {
+ SftpException.class,
+ com.jcraft.jsch.SftpException.class
+ })
+ public HttpWrapper> sftpExceptionHandler(Exception ex) {
+ log.error("sftpExceptionHandler", ex);
return ErrorCode.SFTP_EXCEPTION.wrapper(ex.getMessage());
}
@ExceptionHandler(value = ParseRuntimeException.class)
- public HttpWrapper> parseExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("parseExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> parseExceptionHandler(Exception ex) {
+ log.error("parseExceptionHandler", ex);
if (Exceptions.isCausedBy(ex, EncryptedDocumentException.class)) {
// excel 密码错误
return ErrorCode.EXCEL_PASSWORD_ERROR.wrapper(ex.getMessage());
@@ -117,56 +189,53 @@ public class GlobalExceptionHandler {
}
@ExceptionHandler(value = EncryptException.class)
- public HttpWrapper> encryptExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("encryptExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> encryptExceptionHandler(Exception ex) {
+ log.error("encryptExceptionHandler", ex);
return ErrorCode.ENCRYPT_ERROR.wrapper(ex.getMessage());
}
@ExceptionHandler(value = DecryptException.class)
- public HttpWrapper> decryptExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("decryptExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> decryptExceptionHandler(Exception ex) {
+ log.error("decryptExceptionHandler", ex);
return ErrorCode.DECRYPT_ERROR.wrapper(ex.getMessage());
}
+ @ExceptionHandler(value = {HttpRequestException.class})
+ public HttpWrapper> httpApiRequestExceptionHandler(Exception ex) {
+ log.error("httpApiRequestExceptionHandler", ex);
+ return ErrorCode.HTTP_API.getWrapper();
+ }
+
@ExceptionHandler(value = VcsException.class)
- public HttpWrapper> vcsExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("vcsExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> vcsExceptionHandler(Exception ex) {
+ log.error("vcsExceptionHandler", ex);
return ErrorCode.VCS_OPETATOR_ERROR.wrapper(ex.getMessage());
}
- @ExceptionHandler(value = {TaskExecuteException.class, ExecuteException.class})
- public HttpWrapper> taskExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("taskExceptionHandler url: {}", request.getRequestURI(), ex);
+ @ExceptionHandler(value = {
+ TaskExecuteException.class,
+ ExecuteException.class
+ })
+ public HttpWrapper> taskExceptionHandler(Exception ex) {
+ log.error("taskExceptionHandler", ex);
return ErrorCode.TASK_EXECUTE_ERROR.wrapper(ex.getMessage());
}
@ExceptionHandler(value = ConnectionRuntimeException.class)
- public HttpWrapper> connectionExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("connectionExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> connectionExceptionHandler(Exception ex) {
+ log.error("connectionExceptionHandler", ex);
return ErrorCode.CONNECT_ERROR.wrapper(ex.getMessage());
}
- @ExceptionHandler(value = {TimeoutException.class, java.util.concurrent.TimeoutException.class})
- public HttpWrapper> timeoutExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("timeoutExceptionHandler url: {}", request.getRequestURI(), ex);
- return ErrorCode.REQUEST_TIMEOUT.wrapper(ex.getMessage());
- }
-
- @ExceptionHandler(value = {InterruptedException.class, InterruptedRuntimeException.class, InterruptedIOException.class})
- public HttpWrapper> interruptExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("interruptExceptionHandler url: {}", request.getRequestURI(), ex);
- return ErrorCode.INTERRUPT_ERROR.wrapper(ex.getMessage());
- }
-
@ExceptionHandler(value = UnsafeException.class)
- public HttpWrapper> unsafeExceptionHandler(HttpServletRequest request, Exception ex) {
- log.error("unsafeExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> unsafeExceptionHandler(Exception ex) {
+ log.error("unsafeExceptionHandler", ex);
return ErrorCode.UNSAFE_OPERATOR.wrapper(ex.getMessage());
}
@ExceptionHandler(value = LogException.class)
- public HttpWrapper> logExceptionHandler(HttpServletRequest request, LogException ex) {
- log.error("logExceptionHandler url: {}", request.getRequestURI(), ex);
+ public HttpWrapper> logExceptionHandler(LogException ex) {
+ log.error("logExceptionHandler", ex);
return ErrorCode.INTERNAL_SERVER_ERROR.wrapper(ex.getMessage());
}
@@ -175,12 +244,6 @@ public class GlobalExceptionHandler {
return ErrorCode.EXPRESSION_ERROR.wrapper(ex.getMessage());
}
- @ExceptionHandler(value = MaxUploadSizeExceededException.class)
- public HttpWrapper> maxUploadSizeExceededExceptionHandler(HttpServletRequest request, MaxUploadSizeExceededException ex) {
- log.error("maxUploadSizeExceededExceptionHandler url: {}", request.getRequestURI(), ex);
- return ErrorCode.PAYLOAD_TOO_LARGE.wrapper(ex.getMessage());
- }
-
@ExceptionHandler(value = CodeArgumentException.class)
public HttpWrapper> codeArgumentExceptionHandler(CodeArgumentException ex) {
return HttpWrapper.error(ex.getCode(), ex.getMessage());