humuyu преди 3 години
родител
ревизия
584f504d59
променени са 1 файла, в които са добавени 40 реда и са изтрити 11 реда
  1. 40 11
      eladmin-logging/src/main/java/me/zhengjie/aspect/LogRequestParam.java

+ 40 - 11
eladmin-logging/src/main/java/me/zhengjie/aspect/LogRequestParam.java

@@ -1,6 +1,8 @@
 package me.zhengjie.aspect;
 
 import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.alibaba.fastjson.TypeReference;
 import com.alibaba.fastjson.serializer.SerializerFeature;
 import lombok.extern.slf4j.Slf4j;
 import me.zhengjie.utils.IpAddressUtil;
@@ -20,6 +22,8 @@ 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.ArrayList;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Objects;
@@ -33,6 +37,19 @@ public class LogRequestParam {
 	public void pointCut() {
 	}
 
+	public static boolean isJSON(String str) {
+		boolean result = false;
+		if (StringUtils.isNotBlank(str)) {
+			str = str.trim();
+			if (str.startsWith("{") && str.endsWith("}")) {
+				result = true;
+			} else if (str.startsWith("[") && str.endsWith("]")) {
+				result = true;
+			}
+		}
+		return result;
+	}
+
 	@Before(value = "pointCut()")
 	public void doBefore(JoinPoint joinPoint) {
 		try {
@@ -70,31 +87,43 @@ public class LogRequestParam {
 				Object value = parameterValues[i];
 				if (value == null || value instanceof HttpServletRequest || value instanceof HttpServletResponse) {
 					continue;
-				}
-				if (value instanceof MultipartFile) {
+				} else if (value instanceof MultipartFile) {
 					MultipartFile part = (MultipartFile) value;
 					value = part.getOriginalFilename();
-				}
-				if (value instanceof MultipartFile[]) {
+				} else if (value instanceof MultipartFile[]) {
 					MultipartFile[] part = (MultipartFile[]) value;
 					StringBuffer sb = new StringBuffer();
 					for (MultipartFile file : part) {
 						sb.append(file.getOriginalFilename() + ",");
 					}
 					value = sb.toString();
-				}
-				if (value instanceof AbstractResource) {
-					AbstractResource part = (AbstractResource) value;
-					value = part.getFilename();
-				}
-
-				if (value instanceof String) {
+				} else if (value instanceof String) {
 					String str = (String) value;
 					if (str.length() > 1000) {
 						// 去掉特别长的参数
 						value = str.substring(0, 1000);
 					}
+				} else {
+					// 处理参数是对象的值
+					String object = JSON.toJSONString(value);
+					//先进行赋值
+					value = object;
+					if (isJSON(object)) {
+						JSONObject jsonObj = JSON.parseObject(object);
+						Map<String, String> jsonMap = new HashMap<>();
+						for (String fieldKey : jsonObj.keySet()) {
+							String fieldValue = jsonObj.getString(fieldKey);
+							String valLength = fieldValue;
+							if (StringUtils.isNotBlank(fieldValue) && fieldValue.length() > 1000) {
+								valLength = fieldValue.substring(0, 1000);
+							}
+							jsonMap.put(fieldKey, valLength);
+						}
+						value = jsonMap;
+					} 
+
 				}
+
 				// 记录上传的参数
 				params.put(param, value);
 			}