Переглянути джерело

修改参数逻辑,不再记录无关的参数

周浩 9 роки тому
батько
коміт
b12095e1cc

+ 37 - 5
hsweb-web-core/src/main/java/org/hsweb/web/core/logger/AopAccessLoggerResolver.java

@@ -3,14 +3,21 @@ package org.hsweb.web.core.logger;
 import com.alibaba.fastjson.JSON;
 import org.aspectj.lang.ProceedingJoinPoint;
 import org.aspectj.lang.reflect.MethodSignature;
+import org.hsweb.commons.DateTimeUtils;
 import org.hsweb.web.bean.po.logger.LoggerInfo;
 import org.hsweb.web.core.logger.annotation.AccessLogger;
 import org.hsweb.web.core.utils.WebUtil;
 import org.hsweb.commons.ClassUtils;
 import org.hsweb.commons.MD5;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 import java.lang.reflect.Method;
+import java.util.Date;
+import java.util.LinkedHashMap;
+import java.util.Map;
 
 /**
  * Created by zhouhao on 16-4-28.
@@ -22,7 +29,8 @@ public class AopAccessLoggerResolver {
         HttpServletRequest request = WebUtil.getHttpServletRequest();
         Class<?> target = pjp.getTarget().getClass();
         StringBuilder describe = new StringBuilder();
-        Method method = ((MethodSignature) pjp.getSignature()).getMethod();
+        MethodSignature methodSignature = ((MethodSignature) pjp.getSignature());
+        Method method = methodSignature.getMethod();
         String methodName = getMethodName(pjp);
 
         AccessLogger classAnnotation = ClassUtils.getAnnotation(target, AccessLogger.class);
@@ -35,17 +43,41 @@ public class AopAccessLoggerResolver {
                 describe.append("-");
             describe.append(methodAnnotation.value());
         }
+        Map<String, Object> param = new LinkedHashMap<>();
+        String[] paramNames = methodSignature.getParameterNames();
+        Object[] args = pjp.getArgs();
+        for (int i = 0; i < paramNames.length; i++) {
+            Object arg = args[i];
+            String argString;
+            if (arg instanceof HttpServletRequest
+                    || arg instanceof HttpSession
+                    || arg instanceof HttpServletResponse
+                    || arg instanceof MultipartFile
+                    || arg instanceof MultipartFile[]) continue;
+            if (arg instanceof String) argString = (String) arg;
+            else if (arg instanceof Number) argString = String.valueOf(arg);
+            else if (arg instanceof Date) argString = DateTimeUtils.format(((Date) arg), DateTimeUtils.YEAR_MONTH_DAY_HOUR_MINUTE_SECOND);
+            else {
+                try {
+                    argString = JSON.toJSONString(arg);
+                } catch (Exception e) {
+                    continue;
+                }
+            }
+            param.put(paramNames[i], argString);
+        }
+        Map<String, String> header = WebUtil.getHeaders(request);
         logInfo.setId(MD5.encode(String.valueOf(System.nanoTime())));
         logInfo.setModuleDesc(describe.toString());//方法描述
         logInfo.setClassName(target.getName());//当前访问映射到的类名
         logInfo.setClientIp(WebUtil.getIpAddr(request));//ip地址
         logInfo.setRequestMethod(request.getMethod().concat(".").concat(methodName));//方法:GET.select()
-        logInfo.setRequestHeader(JSON.toJSONString(WebUtil.getHeaders(request)));//http请求头
-        logInfo.setReferer(request.getHeader("referer"));//referer
+        logInfo.setRequestHeader(JSON.toJSONString(header));//http请求头
+        logInfo.setReferer(header.get("Referer"));//referer
         logInfo.setRequestUri(request.getRequestURI());//请求相对路径
         logInfo.setRequestUrl(WebUtil.getBasePath(request).concat(logInfo.getRequestUri().substring(1)));//请求绝对路径
-        logInfo.setUserAgent(request.getHeader("UserAgent"));//客户端标识
-        logInfo.setRequestParam(JSON.toJSONString(WebUtil.getParams(request)));//请求参数
+        logInfo.setUserAgent(header.get("User-Agent"));//客户端标识
+        logInfo.setRequestParam(JSON.toJSONString(param));//请求参数
         return logInfo;
     }