From 4470052c3b6bdeb18e45987f8aa293d1e93d0552 Mon Sep 17 00:00:00 2001
From: Ludc <2870569285@qq.com>
Date: 星期二, 18 十一月 2025 11:59:12 +0800
Subject: [PATCH] 所有文件上传接口增加文件安全校验逻辑。
---
Source/BladeX-Tool/blade-starter-mongo/src/main/java/org/springblade/core/mongo/utils/MongoJsonUtils.java | 126 ++++++++++++++++++++++++++++++++++++++++++
1 files changed, 126 insertions(+), 0 deletions(-)
diff --git a/Source/BladeX-Tool/blade-starter-mongo/src/main/java/org/springblade/core/mongo/utils/MongoJsonUtils.java b/Source/BladeX-Tool/blade-starter-mongo/src/main/java/org/springblade/core/mongo/utils/MongoJsonUtils.java
new file mode 100644
index 0000000..31acdab
--- /dev/null
+++ b/Source/BladeX-Tool/blade-starter-mongo/src/main/java/org/springblade/core/mongo/utils/MongoJsonUtils.java
@@ -0,0 +1,126 @@
+package org.springblade.core.mongo.utils;
+
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.node.ObjectNode;
+
+import java.util.*;
+
+/**
+ * 澶勭悊 mongo json 鏁版嵁缁撴瀯
+ *
+ * @author L.cm
+ */
+public class MongoJsonUtils {
+
+ /**
+ * 鑾峰彇鎵�鏈夌殑鍙跺瓙鑺傜偣鍜岃矾寰勪俊鎭�
+ *
+ * @param jsonNode jsonTree
+ * @return tree鍙跺瓙淇℃伅
+ */
+ public static List<JsonNodeInfo> getLeafNodes(JsonNode jsonNode) {
+ if (jsonNode == null || !jsonNode.isObject()) {
+ return Collections.emptyList();
+ }
+ List<JsonNodeInfo> list = new ArrayList<>();
+ // 鍙屽悜鐨勯槦鍒� Deque 浠f浛 Stack锛孲tack 鎬ц兘涓嶅ソ
+ LinkedList<String> deque = new LinkedList<>();
+ // 閫掑綊鑾峰彇鍙跺瓙 馃崈馃崈馃崈 鑺傜偣
+ getLeafNodes(jsonNode, null, deque, list);
+ return list;
+ }
+
+ private static void getLeafNodes(JsonNode jsonNode, JsonNode parentNode, LinkedList<String> deque, List<JsonNodeInfo> list) {
+ Iterator<Map.Entry<String, JsonNode>> iterator;
+ if (parentNode == null) {
+ iterator = jsonNode.fields();
+ } else {
+ iterator = parentNode.fields();
+ }
+ // tree 瀛愯妭鐐�
+ while (iterator.hasNext()) {
+ Map.Entry<String, JsonNode> entry = iterator.next();
+ String fieldName = entry.getKey();
+ JsonNode nextNode = entry.getValue();
+ // 濡傛灉涓嶆槸鍊艰妭鐐�
+ if (nextNode.isObject()) {
+ // 娣诲姞鍒伴槦鍒楀熬锛屽厛杩涘厛鍑�
+ deque.addLast(fieldName);
+ getLeafNodes(parentNode, nextNode, deque, list);
+ }
+ // 濡傛灉鏄�艰妭鐐癸紝涔熷氨鏄埌鍙跺瓙鑺傜偣浜嗭紝鍙栧彾瀛愯妭鐐逛笂绾у嵆鍙�
+ if (nextNode.isValueNode()) {
+ // 灏佽鑺傜偣鍒楄〃
+ LinkedList<String> elements = new LinkedList<>(deque);
+ // tree 鐨� 鍙跺瓙鑺傜偣锛屾澶勪负寮曠敤
+ list.add(new JsonNodeInfo(elements, parentNode));
+ break;
+ }
+ // 鏍堥潪绌烘椂寮瑰嚭
+ if (!deque.isEmpty()) {
+ deque.removeLast();
+ }
+ }
+ }
+
+ /**
+ * 鏋勫缓鏍戝舰鑺傜偣
+ *
+ * @param jsonNode 鐖剁骇鑺傜偣
+ * @param elements tree鑺傜偣鍒楄〃
+ * @return JsonNode 鍙跺瓙鑺傜偣锛岃繑鍥炵敤浜庡鏁版嵁
+ */
+ public static ObjectNode buildNode(ObjectNode jsonNode, List<String> elements) {
+ ObjectNode newNode = jsonNode;
+ for (String element : elements) {
+ // 濡傛灉宸茬粡瀛樺湪鑺傜偣锛岃繖涓嶇敓鎴愭柊鐨�
+ if (newNode.has(element)) {
+ newNode = (ObjectNode) newNode.get(element);
+ } else {
+ newNode = newNode.putObject(element);
+ }
+ }
+ return newNode;
+ }
+
+ /**
+ * 鑾峰彇鎵�鏈� 馃崈馃崈馃崈 鑺傜偣鐨勫�硷紝骞舵瀯寤烘垚 mongodb update 璇彞
+ * @param prefix 鍓嶇紑
+ * @param nodeKeys mongo keys
+ * @param objectNode tree 馃崈 鑺傜偣
+ * @return tree 鑺傜偣淇℃伅
+ */
+ public static Map<String, Object> getAllUpdate(String prefix, String nodeKeys, ObjectNode objectNode) {
+ Map<String, Object> values = new HashMap<>(8);
+ Iterator<String> iterator = objectNode.fieldNames();
+ while (iterator.hasNext()) {
+ String fieldName = iterator.next();
+ JsonNode valueNode = objectNode.get(fieldName);
+ if (valueNode.isValueNode()) {
+ Object value;
+ if (valueNode.isShort()) {
+ value = valueNode.shortValue();
+ } else if (valueNode.isInt()) {
+ value = valueNode.intValue();
+ } else if (valueNode.isLong()) {
+ value = valueNode.longValue();
+ } else if (valueNode.isBoolean()) {
+ value = valueNode.booleanValue();
+ } else if (valueNode.isFloat()) {
+ value = valueNode.floatValue();
+ } else if (valueNode.isDouble()) {
+ value = valueNode.doubleValue();
+ } else if (valueNode.isMissingNode()) {
+ value = null;
+ } else {
+ value = valueNode.textValue();
+ }
+ if (value != null) {
+ String valueKey = prefix + '.' + nodeKeys + '.' + fieldName;
+ values.put(valueKey, value);
+ }
+ }
+ }
+ return values;
+ }
+}
--
Gitblit v1.10.0