Browse Source

增加限流,限制fastjson

menglu 3 years ago
parent
commit
8f304aa0d6

+ 1 - 0
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/Application_ibms_data_sdk.java

@@ -11,6 +11,7 @@ import org.springframework.scheduling.annotation.EnableScheduling;
 public class Application_ibms_data_sdk {
 
 	public static void main(String[] args) throws Exception {
+		System.setProperty("fastjson.serializer_buffer_threshold", "64");
 		SpringApplication.run(Application_ibms_data_sdk.class, args);
 	}
 

+ 18 - 3
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/service/rest/RestApi.java

@@ -1,5 +1,8 @@
 package com.persagy.ibms.data.sdk.service.rest;
 
+import java.util.Date;
+import java.util.concurrent.ConcurrentHashMap;
+
 import javax.servlet.http.HttpServletRequest;
 
 import org.springframework.web.bind.annotation.GetMapping;
@@ -11,6 +14,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
 import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
+import com.persagy.ibms.data.sdk.util.RepositoryBase;
 import com.persagy.ibms.data.sdk.util.ToolUtil;
 import com.persagy.ibms.data.sdk.websocket.AlarmWebSocketClient;
 import com.persagy.ibms.data.sdk.websocket.IOTWebSocketClient;
@@ -89,8 +93,19 @@ public class RestApi {
 	public String post(@RequestBody String param, HttpServletRequest request) {
 		String ip = RestUtil.getIp(request);
 		log.info("ip:" + ip + " || post: " + param);
-		String result = RestUtil.post(param);
-		return result;
+		RepositoryBase.ip2param2time.putIfAbsent(ip, new ConcurrentHashMap<String, Date>());
+		ConcurrentHashMap<String, Date> param2time = RepositoryBase.ip2param2time.get(ip);
+		if (!param2time.containsKey(param)) {
+			param2time.put(param, new Date());
+			try {
+				String result = RestUtil.post(param);
+				return result;
+			} finally {
+				param2time.remove(param);
+			}
+		} else {
+			return null;
+		}
 	}
 
 	@PostMapping(path = { "/post_filter_and_page", "/zkt-sdk/post_filter_and_page" }, produces = "application/json;charset=UTF-8")
@@ -130,7 +145,7 @@ public class RestApi {
 	}
 
 	@PostMapping(path = { "/getEquipStaticInfo", "/zkt-sdk/getEquipStaticInfo" }, produces = "application/json;charset=UTF-8")
-	public String getEquipStaticInfo(@RequestBody String param){
+	public String getEquipStaticInfo(@RequestBody String param) {
 		String result = RestUtil.getEquipStaticInfo(param).toJSONString();
 		return result;
 	}

+ 4 - 1
ibms-data-sdk/src/main/java/com/persagy/ibms/data/sdk/util/RepositoryBase.java

@@ -1,12 +1,13 @@
 package com.persagy.ibms.data.sdk.util;
 
+import java.util.Date;
 import java.util.List;
 import java.util.concurrent.ConcurrentHashMap;
 
 import com.alibaba.fastjson.JSONObject;
 import com.persagy.ibms.data.sdk.data.SceneDataObject;
-import com.persagy.ibms.data.sdk.data.SceneDataValue;
 import com.persagy.ibms.data.sdk.data.SceneDataSet;
+import com.persagy.ibms.data.sdk.data.SceneDataValue;
 
 public class RepositoryBase {
 	public static Repository instance = new Repository();
@@ -32,4 +33,6 @@ public class RepositoryBase {
 	// 指定路径的控制值
 	public static ConcurrentHashMap<String, JSONObject> controlValueMap = new ConcurrentHashMap<String, JSONObject>();
 
+	// 限流用
+	public static ConcurrentHashMap<String, ConcurrentHashMap<String, Date>> ip2param2time = new ConcurrentHashMap<String, ConcurrentHashMap<String, Date>>();
 }