From cbd23f86b336f2a81e2867d5e55a74fdabfc6d22 Mon Sep 17 00:00:00 2001 From: zhaoyong Date: Thu, 17 Jun 2021 19:23:06 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=96=B9=E6=B3=95=E6=97=A5?= =?UTF-8?q?=E5=BF=97=E5=88=87=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common-common/pom.xml | 22 ++++- .../common/annotation/UrlValidation.java | 43 ++++++++++ .../support/UrlValidationValidator.java | 28 +++++++ .../common/logger/MethodAroundLog.java | 27 ++++++ .../common/logger/MethodAroundLogAspect.java | 82 +++++++++++++++++++ 5 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 common-common/src/main/java/cn/azxo/framework/common/annotation/UrlValidation.java create mode 100644 common-common/src/main/java/cn/azxo/framework/common/annotation/support/UrlValidationValidator.java create mode 100644 common-common/src/main/java/cn/azxo/framework/common/logger/MethodAroundLog.java create mode 100644 common-common/src/main/java/cn/azxo/framework/common/logger/MethodAroundLogAspect.java 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[] 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; + } + } + +}