volta 2 éve
szülő
commit
98ccbc71bb

+ 119 - 0
launch-common/src/main/java/com/webflux/launchcommon/config/Interceptor.java

@@ -0,0 +1,119 @@
+package com.webflux.launchcommon.config;
+
+
+import cn.hutool.json.JSONUtil;
+import com.mokasz.vnovel.common.core.config.AspectConfig;
+import com.mokasz.vnovel.core.entity.TokenInfo;
+import com.mokasz.vnovel.core.util.TokenInfoUtil;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.JoinPoint;
+import org.aspectj.lang.annotation.AfterReturning;
+import org.aspectj.lang.annotation.Aspect;
+import org.aspectj.lang.annotation.Before;
+import org.aspectj.lang.annotation.Pointcut;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.web.context.request.RequestContextHolder;
+import org.springframework.web.context.request.ServletRequestAttributes;
+
+import javax.servlet.http.HttpServletRequest;
+
+/**
+ * @author ljj12094
+ */
+@Aspect
+@Component
+@Order
+@RequiredArgsConstructor
+@Slf4j
+public class ParameterLogAspect {
+
+    private final AspectConfig aspectConfig;
+
+    private static ThreadLocal<Long> startTime = new ThreadLocal<Long>();
+
+    private static ThreadLocal<String> requestUrl = new ThreadLocal<String>();
+
+    /**
+     * 申明一个切点 里面是 execution表达式
+     */
+    @Pointcut("execution(public * com.mokasz.vnovel.app.controller.*.*(..))")
+    private void controllerAspect() {
+    }
+
+    /**
+     * 请求method前打印内容
+     *
+     * @param joinPoint
+     */
+    @Before(value = "controllerAspect()")
+    public void methodBefore(JoinPoint joinPoint) {
+        try {
+            if (aspectConfig.isEnableParameterLog()) {
+                ServletRequestAttributes requestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
+                HttpServletRequest request = requestAttributes.getRequest();
+
+                startTime.set(System.currentTimeMillis());
+                requestUrl.set(request.getRequestURL().toString());
+
+                //打印请求内容
+                StringBuilder sb = new StringBuilder();
+                TokenInfo tokenInfo = TokenInfoUtil.getTokenInfo();
+                if (tokenInfo != null) {
+                    sb.append(">>>>>>>>>>令牌信息>>>>>>>>>>");
+                    sb.append(JSONUtil.toJsonStr(tokenInfo));
+                    sb.append("<<<<<<<<<<令牌信息<<<<<<<<<<");
+                }
+                sb.append(">>>>>>>>>>请求内容>>>>>>>>>>");
+                sb.append("请求地址:" + request.getRequestURL().toString() + " ");
+                sb.append("请求方式:" + request.getMethod() + " ");
+                sb.append("请求类方法:" + joinPoint.getSignature() + " ");
+
+                for (Object o : joinPoint.getArgs()) {
+                    try {
+                        sb.append("请求类方法参数:" + JSONUtil.toJsonStr(o) + " ");
+                    } catch (Exception e) {
+                        sb.append("请求类方法参数e:" + o.toString() + " ");
+                    }
+                }
+                sb.append("<<<<<<<<<<请求内容<<<<<<<<<<");
+
+                log.info(sb.toString());
+            }
+        } catch (Exception e) {
+            log.error("记录参数日志发生异常", e);
+        }
+    }
+
+    /**
+     * 在方法执行完结后打印返回内容
+     *
+     * @param o
+     */
+    @AfterReturning(returning = "o", pointcut = "controllerAspect()")
+    public void methodAfterReturning(Object o) {
+        try {
+            if (aspectConfig.isEnableParameterLog()) {
+                // 打印返回结果
+                StringBuilder sb = new StringBuilder();
+                sb.append(">>>>>>>>>>返回内容>>>>>>>>>>");
+                sb.append("请求地址:" + requestUrl.get() + " ");
+                try {
+                    sb.append("Response内容:" + JSONUtil.toJsonStr(o) + " ");
+                } catch (Exception e) {
+                    sb.append("Response内容:" + o.toString() + " ");
+                }
+                sb.append("<<<<<<<<<<返回内容<<<<<<<<<< ");
+                sb.append("请求处理时间为:" + (System.currentTimeMillis() - startTime.get()) + "ms ");
+
+                log.info(sb.toString());
+
+                startTime.remove();
+                requestUrl.remove();
+            }
+        } catch (Exception e) {
+            log.error("记录参数日志发生异常", e);
+        }
+    }
+}