diff --git a/common-common/pom.xml b/common-common/pom.xml
index cc2fb09..6279c4e 100644
--- a/common-common/pom.xml
+++ b/common-common/pom.xml
@@ -6,13 +6,15 @@
cn.axzo.framework
common-common
- 1.0.3
+ 1.0.4
UTF-8
1.8
1.8
+ 1.7.3
+ 1.0
1.18.18
1.8
1.7.5
@@ -29,6 +31,24 @@
+
+ org.aspectj
+ aspectjrt
+ ${aspectj.version}
+ provided
+
+
+ org.aspectj
+ aspectjweaver
+ ${aspectj.version}
+ provided
+
+
+ aopalliance
+ aopalliance
+ ${aopalliance.version}
+ provided
+
org.slf4j
slf4j-api
diff --git a/common-common/src/main/java/cn/azxo/framework/common/annotation/UrlValidation.java b/common-common/src/main/java/cn/azxo/framework/common/annotation/UrlValidation.java
new file mode 100644
index 0000000..5cf677a
--- /dev/null
+++ b/common-common/src/main/java/cn/azxo/framework/common/annotation/UrlValidation.java
@@ -0,0 +1,43 @@
+package cn.azxo.framework.common.annotation;
+
+import cn.azxo.framework.common.annotation.support.UrlValidationValidator;
+import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
+import static java.lang.annotation.ElementType.CONSTRUCTOR;
+import static java.lang.annotation.ElementType.FIELD;
+import static java.lang.annotation.ElementType.METHOD;
+import static java.lang.annotation.ElementType.PARAMETER;
+import static java.lang.annotation.RetentionPolicy.RUNTIME;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.Documented;
+import java.lang.annotation.Retention;
+import java.lang.annotation.Target;
+
+/**
+ * URL 校验
+ *
+ * @author zhaoyong
+ * @see UrlValidation
+ * @since 2021-06-15 11:27
+ */
+@Documented
+@Constraint(validatedBy = UrlValidationValidator.class)
+@Target({ METHOD, FIELD })
+@Retention(RUNTIME)
+public @interface UrlValidation {
+
+ String message() default "mandatory field format is error";
+
+ Class>[] groups() default {};
+
+ Class extends Payload>[] payload() default {};
+
+ @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
+ @Retention(RUNTIME)
+ @Documented
+ @interface List {
+ UrlValidation[] value();
+ }
+
+}
\ No newline at end of file
diff --git a/common-common/src/main/java/cn/azxo/framework/common/annotation/support/UrlValidationValidator.java b/common-common/src/main/java/cn/azxo/framework/common/annotation/support/UrlValidationValidator.java
new file mode 100644
index 0000000..ff2f44f
--- /dev/null
+++ b/common-common/src/main/java/cn/azxo/framework/common/annotation/support/UrlValidationValidator.java
@@ -0,0 +1,28 @@
+package cn.azxo.framework.common.annotation.support;
+
+import cn.azxo.framework.common.annotation.UrlValidation;
+import cn.azxo.framework.common.utils.StringUtils;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+
+/**
+ * UrlValidation 注解实现类
+ *
+ * @author zhaoyong
+ * @see UrlValidationValidator
+ * @since 2021-06-15 11:28
+ */
+public class UrlValidationValidator implements ConstraintValidator {
+
+ @Override
+ public void initialize(UrlValidation constraintAnnotation) {
+
+ }
+
+ @Override
+ public boolean isValid(String value, ConstraintValidatorContext context) {
+ return StringUtils.isBlank(value) || value.startsWith("http://") || value.startsWith("https://");
+ }
+
+}
diff --git a/common-common/src/main/java/cn/azxo/framework/common/logger/MethodAroundLog.java b/common-common/src/main/java/cn/azxo/framework/common/logger/MethodAroundLog.java
new file mode 100644
index 0000000..677cba8
--- /dev/null
+++ b/common-common/src/main/java/cn/azxo/framework/common/logger/MethodAroundLog.java
@@ -0,0 +1,27 @@
+package cn.azxo.framework.common.logger;
+
+import java.lang.annotation.Documented;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+/**
+ * 日志注解
+ *
+ * @author zhaoyong
+ * @see MethodAroundLog
+ * @since 2021-06-17 18:00
+ */
+@Target({ ElementType.METHOD })
+@Retention(RetentionPolicy.RUNTIME)
+@Documented
+public @interface MethodAroundLog {
+
+ String source() default "";
+
+ String target() default "";
+
+ String value() default "";
+
+}
diff --git a/common-common/src/main/java/cn/azxo/framework/common/logger/MethodAroundLogAspect.java b/common-common/src/main/java/cn/azxo/framework/common/logger/MethodAroundLogAspect.java
new file mode 100644
index 0000000..91d9a76
--- /dev/null
+++ b/common-common/src/main/java/cn/azxo/framework/common/logger/MethodAroundLogAspect.java
@@ -0,0 +1,82 @@
+package cn.azxo.framework.common.logger;
+
+import cn.azxo.framework.common.utils.StringUtils;
+import com.alibaba.fastjson.JSON;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.Signature;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+
+/**
+ * 日志注解 @MethodAroundLog 实现类
+ *
+ * @author zhaoyong
+ * @see MethodAroundLogAspect
+ * @since 2021-06-17 18:01
+ */
+@Aspect
+@Slf4j
+public class MethodAroundLogAspect {
+
+ @Around("@annotation(aroundLog)")
+ public Object methodHandler(ProceedingJoinPoint pjp, MethodAroundLog aroundLog) throws Throwable {
+ long startTime = System.currentTimeMillis();
+
+ logRequest(pjp, aroundLog);
+
+ Object response = pjp.proceed();
+
+ logResponse(startTime, response, pjp, aroundLog);
+
+ return response;
+ }
+
+ private void logRequest(ProceedingJoinPoint pjp, MethodAroundLog aroundLog) {
+ String bizInfo = getBizInfo(aroundLog, true);
+ Object[] params = pjp.getArgs();
+ String signature = getSignature(pjp);
+ log.info("[{}] {} Begin request param is:{}", bizInfo ,signature, JSON.toJSONString(params));
+ }
+
+ private void logResponse(long startTime, Object response, ProceedingJoinPoint pjp, MethodAroundLog aroundLog) {
+ long endTime = System.currentTimeMillis();
+ String signatureInfo = getSignature(pjp);
+ String costTime = (endTime - startTime) + "ms";
+ String bizInfo = getBizInfo(aroundLog, false);
+ if (response != null) {
+ log.info("[{}] {} End response is : {},COST : {}", bizInfo, signatureInfo, JSON.toJSONString(response), costTime);
+ } else {
+ log.info("[{}] {} End response is null or void,COST : {}", bizInfo, signatureInfo, costTime);
+ }
+ }
+
+ private String getSignature(ProceedingJoinPoint pjp){
+ StringBuilder sb = new StringBuilder();
+ Signature signature = pjp.getSignature();
+ String typeName = signature.getDeclaringType().getSimpleName();
+ String methodName = signature.getName();
+ sb.append(typeName).append("#").append(methodName);
+ return sb.toString();
+ }
+
+ private String getBizInfo(MethodAroundLog aroundLog, boolean request){
+ StringBuilder sb = new StringBuilder();
+ String source = aroundLog.source();
+ String target = aroundLog.target();
+ String value = aroundLog.value();
+ if(StringUtils.isNotBlank(source) && StringUtils.isNotBlank(target)) {
+ sb.append(source);
+ if(request) {
+ sb.append(" -> ");
+ } else {
+ sb.append(" <- ");
+ }
+ sb.append(target).append(":").append(value);
+ return sb.toString();
+ } else {
+ return value;
+ }
+ }
+
+}