|
|
@@ -0,0 +1,110 @@
|
|
|
+package me.zhengjie.aspect;
|
|
|
+
|
|
|
+import com.alibaba.fastjson.JSON;
|
|
|
+import com.alibaba.fastjson.serializer.SerializerFeature;
|
|
|
+import lombok.extern.slf4j.Slf4j;
|
|
|
+
|
|
|
+
|
|
|
+import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.aspectj.lang.JoinPoint;
|
|
|
+import org.aspectj.lang.Signature;
|
|
|
+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.aspectj.lang.reflect.CodeSignature;
|
|
|
+import org.slf4j.MDC;
|
|
|
+import org.springframework.stereotype.Component;
|
|
|
+import org.springframework.web.context.request.RequestContextHolder;
|
|
|
+import org.springframework.web.context.request.ServletRequestAttributes;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
+
|
|
|
+import javax.servlet.http.HttpServletRequest;
|
|
|
+import javax.servlet.http.HttpServletResponse;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.Objects;
|
|
|
+import java.util.UUID;
|
|
|
+
|
|
|
+@Slf4j
|
|
|
+@Aspect
|
|
|
+@Component
|
|
|
+public class LogRequestParam {
|
|
|
+
|
|
|
+
|
|
|
+ @Pointcut("execution(* me.zhengjie.application.*.controller..*.*(..))")
|
|
|
+ public void pointCut() {
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @Before(value = "pointCut()")
|
|
|
+ public void doBefore(JoinPoint joinPoint) {
|
|
|
+ try {
|
|
|
+
|
|
|
+ ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder
|
|
|
+ .getRequestAttributes();
|
|
|
+ if (Objects.isNull(servletRequestAttributes)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ HttpServletRequest request = servletRequestAttributes.getRequest();
|
|
|
+
|
|
|
+ String ip = request.getRemoteAddr();
|
|
|
+
|
|
|
+ String uri = request.getRequestURI();
|
|
|
+
|
|
|
+ Object[] parameterValues = joinPoint.getArgs();
|
|
|
+ int parameterValuesLength = parameterValues.length;
|
|
|
+ if (parameterValuesLength == 0) {
|
|
|
+ log.debug("[请求参数] - 无");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ Signature signature = joinPoint.getSignature();
|
|
|
+ if (Objects.isNull(signature)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String[] parameterNames = ((CodeSignature) signature).getParameterNames();
|
|
|
+ if (Objects.isNull(parameterNames) || parameterNames.length != parameterValuesLength) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Map<String, Object> params = new HashMap<>(4);
|
|
|
+ for (int i = 0; i < parameterNames.length; i++) {
|
|
|
+ Object o = parameterNames[i];
|
|
|
+ if (o instanceof MultipartFile || o instanceof MultipartFile[] || o instanceof HttpServletRequest
|
|
|
+ || o instanceof HttpServletResponse) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ params.put(parameterNames[i], parameterValues[i]);
|
|
|
+ }
|
|
|
+ Object[] obj = { ip, uri, JSON.toJSONString(params, SerializerFeature.WriteMapNullValue) };
|
|
|
+ log.info("[request] - ip: {} , requestUrl: {} ,param: {} ", obj);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ @AfterReturning(returning = "result", pointcut = "pointCut() ")
|
|
|
+ public void doAfterReturning(Object result) {
|
|
|
+ try {
|
|
|
+ ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder
|
|
|
+ .getRequestAttributes();
|
|
|
+ if (Objects.isNull(servletRequestAttributes)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ HttpServletResponse response = servletRequestAttributes.getResponse();
|
|
|
+ if (Objects.isNull(response)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ int status = response.getStatus();
|
|
|
+ HttpServletRequest request = servletRequestAttributes.getRequest();
|
|
|
+
|
|
|
+ String uri = request.getRequestURI();
|
|
|
+ Object obj[] = { status, uri, JSON.toJSONString(result, SerializerFeature.WriteMapNullValue) };
|
|
|
+ log.info("[reponse] - status: {} , url:{} ,result:{}", obj);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|