Просмотр исходного кода

web配置相关修改实时生效

o2sword 5 лет назад
Родитель
Сommit
080c2f79c9

+ 54 - 0
o2server/configSample/mock.json

@@ -0,0 +1,54 @@
+{
+  "mock": {
+    "x_processplatform_assemble_surface": {
+      "put": {
+        "to": "post",
+        "append": "mockputtopost"
+      },
+      "delete": {
+        "to": "get",
+        "append": "mockdeletetoget"
+      }
+    },
+    "x_cms_assemble_control": {
+      "put": {
+        "to": "post",
+        "append": "mockputtopost"
+      },
+      "delete": {
+        "to": "get",
+        "append": "mockdeletetoget"
+      }
+    },
+    "x_query_assemble_surface": {
+      "put": {
+        "to": "post",
+        "append": "mockputtopost"
+      },
+      "delete": {
+        "to": "get",
+        "append": "mockdeletetoget"
+      }
+    },
+    "x_organization_assemble_authentication": {
+      "put": {
+        "to": "post",
+        "append": "mockputtopost"
+      },
+      "delete": {
+        "to": "get",
+        "append": "mockdeletetoget"
+      }
+    },
+    "x_organization_assemble_personal": {
+      "put": {
+        "to": "post",
+        "append": "mockputtopost"
+      },
+      "delete": {
+        "to": "get",
+        "append": "mockdeletetoget"
+      }
+    }
+  }
+}

+ 2 - 3
o2server/configSample/web.json

@@ -1,4 +1,3 @@
 {
-  "mock": {},
-  "###mock": "使用Post模拟Put,Get模拟Delete的模块.###"
-}
+  "###web": "web端使用到的全局参数配置,没有特定业务含义,满足json格式即可.###"
+}

+ 14 - 0
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/Config.java

@@ -81,6 +81,7 @@ public class Config {
 	public static final String PATH_CONFIG_COMPONENTS = "config/components.json";
 	public static final String PATH_CONFIG_EMAIL = "config/email.json";
 	public static final String PATH_CONFIG_WEB = "config/web.json";
+	public static final String PATH_CONFIG_MOCK = "config/mock.json";
 
 	public static final String DIR_COMMONS = "commons";
 	public static final String DIR_COMMONS_TESS4J_TESSDATA = "commons/tess4j/tessdata";
@@ -1176,6 +1177,19 @@ public class Config {
 		return instance().web;
 	}
 
+	public JsonObject mock;
+
+	public static synchronized JsonObject mock() throws Exception {
+		if (null == instance().mock) {
+			JsonObject obj = BaseTools.readConfigObject(PATH_CONFIG_MOCK, JsonObject.class);
+			if (null == obj) {
+				obj = new JsonObject();
+			}
+			instance().mock = obj;
+		}
+		return instance().mock;
+	}
+
 	public Map<String, JsonObject> customConfig = new HashMap<>();
 
 	public static synchronized JsonObject customConfig(String configName) throws Exception {

+ 100 - 5
o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/WebServers.java

@@ -1,21 +1,28 @@
 package com.x.base.core.project.config;
 
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Comparator;
-import java.util.List;
-import java.util.Random;
+import java.io.File;
+import java.util.*;
 import java.util.concurrent.ConcurrentSkipListMap;
 
+import com.google.gson.Gson;
+import com.google.gson.JsonElement;
+import com.x.base.core.project.gson.XGsonBuilder;
+import com.x.base.core.project.tools.DefaultCharset;
+import com.x.base.core.project.tools.Host;
+import org.apache.commons.codec.binary.Base64;
+import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang3.BooleanUtils;
 import org.apache.commons.lang3.ObjectUtils;
 
 import com.x.base.core.project.tools.ListTools;
+import org.apache.commons.lang3.StringUtils;
 
 public class WebServers extends ConcurrentSkipListMap<String, WebServer> {
 
 	private static final long serialVersionUID = -706102090064680898L;
 
+	private static final String MAP_LOGINPAGE = "loginPage";
+
 	public WebServers() {
 		super();
 	}
@@ -66,4 +73,92 @@ public class WebServers extends ConcurrentSkipListMap<String, WebServer> {
 		});
 	}
 
+	public static void updateWebServerConfigJson() throws Exception {
+		File dir = new File(Config.base(), "servers/webServer/x_desktop/res/config");
+		FileUtils.forceMkdir(dir);
+		File file = new File(dir, "config.json");
+
+		Gson gson = XGsonBuilder.instance();
+
+		LinkedHashMap<String, Object> map = new LinkedHashMap<>();
+		/** 覆盖掉配置的参数 */
+		com.x.base.core.project.config.CenterServer centerServerConfig = Config.nodes().centerServers().first()
+				.getValue();
+		map.putAll(centerServerConfig.getConfig());
+		List<Map<String, String>> centers = new ArrayList<>();
+		map.put("center", centers);
+		/** 写入center地址 */
+		Map<String, String> center = new HashMap<String, String>();
+		center = new HashMap<String, String>();
+		center.put("host", "");
+		center.put("port", centerServerConfig.getPort().toString());
+		centers.add(center);
+		if (!Objects.equals(centerServerConfig.getProxyPort(), centerServerConfig.getPort())) {
+			center = new HashMap<String, String>();
+			center.put("host", "");
+			center.put("port", centerServerConfig.getProxyPort().toString());
+			centers.add(center);
+		}
+		String host = Config.nodes().primaryCenterNode();
+		if (!Host.isRollback(host)) {
+			center = new HashMap<String, String>();
+			center.put("host", host);
+			center.put("port", centerServerConfig.getPort().toString());
+			centers.add(center);
+		}
+		/** 写入proxy地址 */
+		if (StringUtils.isNotEmpty(centerServerConfig.getProxyHost())) {
+			center = new HashMap<String, String>();
+			center.put("host", centerServerConfig.getProxyHost());
+			center.put("port", centerServerConfig.getProxyPort().toString());
+			centers.add(center);
+		}
+
+		/** 写入systemName */
+		map.put("footer", Config.collect().getFooter());
+		map.put("title", Config.collect().getTitle());
+		map.put("appUrl", Config.collect().getAppUrl());
+		/***/
+		if (centerServerConfig.getSslEnable()) {
+			map.put("app_protocol", "https:");
+		} else {
+			map.put("app_protocol", "http:");
+		}
+		/* 上面的无效 */
+		map.put("app_protocol", "auto");
+		if ((null != Config.portal().getLoginPage())
+				&& (BooleanUtils.isTrue(Config.portal().getLoginPage().getEnable()))) {
+			map.put(MAP_LOGINPAGE, Config.portal().getLoginPage());
+		} else if ((null != Config.person().getLoginPage())
+				&& (BooleanUtils.isTrue(Config.person().getLoginPage().getEnable()))) {
+			map.put(MAP_LOGINPAGE, Config.person().getLoginPage());
+		} else {
+			map.put(MAP_LOGINPAGE, Config.portal().getLoginPage());
+		}
+		map.put("indexPage", Config.portal().getIndexPage());
+		map.put("webSocketEnable", Config.communicate().wsEnable());
+		map.put("urlMapping", Config.portal().getUrlMapping());
+
+		/* 密码规则 */
+		map.put("passwordRegex", Config.person().getPasswordRegex());
+		map.put("passwordRegexHint", Config.person().getPasswordRegexHint());
+
+		/* RSA */
+		File publicKeyFile = new File(Config.base(), "config/public.key");
+		if (publicKeyFile.exists() && publicKeyFile.isFile()) {
+			String publicKey = FileUtils.readFileToString(publicKeyFile, "utf-8");
+			byte[] publicKeyB = org.apache.commons.codec.binary.Base64.decodeBase64(publicKey);
+			publicKey = new String(Base64.encodeBase64(publicKeyB));
+			map.put("publicKey", publicKey);
+		}
+
+		for (Entry<String, JsonElement> en : Config.web().entrySet()) {
+			map.put(en.getKey(), en.getValue());
+		}
+		for (Entry<String, JsonElement> en : Config.mock().entrySet()) {
+			map.put(en.getKey(), en.getValue());
+		}
+		FileUtils.writeStringToFile(file, gson.toJson(map), DefaultCharset.charset);
+	}
+
 }

+ 4 - 8
o2server/x_base_core_project/src/main/java/com/x/base/core/project/tools/BaseTools.java

@@ -145,16 +145,12 @@ public class BaseTools {
 	public  static boolean executeSyncFile(String syncFilePath) throws Exception {
 
 		boolean Syncflag = false;
-		String localip = getIpAddress();
 		Nodes nodes = Config.nodes();
 		//同步config文件
 		if(Config.nodes().centerServers().first().getValue().getConfigApiEnable()) {
 			for (String node : nodes.keySet()) {
-				//其他服务器
-				if (!node.equalsIgnoreCase(localip)) {
-					if (nodes.get(node).getApplication().getEnable() || nodes.get(node).getCenter().getEnable()) {
-						Syncflag = executeSyncFile(syncFilePath, node, nodes.get(node).nodeAgentPort());
-					}
+				if (nodes.get(node).getApplication().getEnable() || nodes.get(node).getCenter().getEnable()) {
+					Syncflag = executeSyncFile(syncFilePath, node, nodes.get(node).nodeAgentPort());
 				}
 			}
 		}
@@ -172,7 +168,7 @@ public class BaseTools {
 			fileInputStream= new FileInputStream(syncFile);
 
 			socket.setKeepAlive(true);
-			socket.setSoTimeout(5000);
+			socket.setSoTimeout(2000);
 			DataOutputStream dos = null;
 			DataInputStream dis  = null;
 			try {
@@ -236,4 +232,4 @@ public class BaseTools {
 		}
 		return "";
 	}
-}
+}

+ 7 - 0
o2server/x_console/src/main/java/com/x/server/console/NodeAgent.java

@@ -23,6 +23,7 @@ import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpression;
 import javax.xml.xpath.XPathFactory;
 
+import com.x.base.core.project.config.WebServers;
 import com.x.base.core.project.tools.*;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.io.FileUtils;
@@ -133,6 +134,12 @@ public class NodeAgent extends Thread {
 								fos.flush();
 							}
 							fos.close();
+							Config.flush();
+							if(syncFilePath.indexOf("web.json") > -1 || syncFilePath.indexOf("collect.json") > -1
+									|| syncFilePath.indexOf("portal.json") > -1){
+								// 更新web服务配置信息
+								WebServers.updateWebServerConfigJson();
+							}
 							logger.info("同步完成");
 							continue;
 

+ 3 - 96
o2server/x_console/src/main/java/com/x/server/console/server/web/WebServerTools.java

@@ -4,19 +4,13 @@ import java.io.File;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.ArrayList;
 import java.util.EnumSet;
-import java.util.HashMap;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
 import java.util.Map.Entry;
-import java.util.Objects;
 import java.util.stream.Stream;
 
 import javax.servlet.DispatcherType;
 
-import org.apache.commons.codec.binary.Base64;
+import com.x.base.core.project.config.WebServers;
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.io.FilenameUtils;
 import org.apache.commons.lang3.BooleanUtils;
@@ -31,8 +25,6 @@ import org.eclipse.jetty.webapp.WebAppContext;
 
 import com.alibaba.druid.support.http.StatViewServlet;
 import com.alibaba.druid.support.http.WebStatFilter;
-import com.google.gson.Gson;
-import com.google.gson.JsonElement;
 import com.x.base.core.project.x_program_center;
 import com.x.base.core.project.config.Config;
 import com.x.base.core.project.config.WebServer;
@@ -40,7 +32,6 @@ import com.x.base.core.project.gson.XGsonBuilder;
 import com.x.base.core.project.logger.Logger;
 import com.x.base.core.project.logger.LoggerFactory;
 import com.x.base.core.project.tools.DefaultCharset;
-import com.x.base.core.project.tools.Host;
 import com.x.server.console.server.JettySeverTools;
 
 public class WebServerTools extends JettySeverTools {
@@ -54,8 +45,8 @@ public class WebServerTools extends JettySeverTools {
 
 	public static Server start(WebServer webServer) throws Exception {
 
-		// 更新x_desktop的center指向
-		updateCenterConfigJson();
+		// 更新web服务配置信息
+		WebServers.updateWebServerConfigJson();
 		// 更新 favicon.ico
 		updateFavicon();
 		// 创建index.html
@@ -172,90 +163,6 @@ public class WebServerTools extends JettySeverTools {
 
 	}
 
-	private static void updateCenterConfigJson() throws Exception {
-		File dir = new File(Config.base(), "servers/webServer/x_desktop/res/config");
-		FileUtils.forceMkdir(dir);
-		File file = new File(dir, "config.json");
-
-		Gson gson = XGsonBuilder.instance();
-
-		LinkedHashMap<String, Object> map = new LinkedHashMap<>();
-		/** 覆盖掉配置的参数 */
-		com.x.base.core.project.config.CenterServer centerServerConfig = Config.nodes().centerServers().first()
-				.getValue();
-		map.putAll(centerServerConfig.getConfig());
-		List<Map<String, String>> centers = new ArrayList<>();
-		map.put("center", centers);
-		/** 写入center地址 */
-		Map<String, String> center = new HashMap<String, String>();
-		center = new HashMap<String, String>();
-		center.put("host", "");
-		center.put("port", centerServerConfig.getPort().toString());
-		centers.add(center);
-		if (!Objects.equals(centerServerConfig.getProxyPort(), centerServerConfig.getPort())) {
-			center = new HashMap<String, String>();
-			center.put("host", "");
-			center.put("port", centerServerConfig.getProxyPort().toString());
-			centers.add(center);
-		}
-		String host = Config.nodes().primaryCenterNode();
-		if (!Host.isRollback(host)) {
-			center = new HashMap<String, String>();
-			center.put("host", host);
-			center.put("port", centerServerConfig.getPort().toString());
-			centers.add(center);
-		}
-		/** 写入proxy地址 */
-		if (StringUtils.isNotEmpty(centerServerConfig.getProxyHost())) {
-			center = new HashMap<String, String>();
-			center.put("host", centerServerConfig.getProxyHost());
-			center.put("port", centerServerConfig.getProxyPort().toString());
-			centers.add(center);
-		}
-
-		/** 写入systemName */
-		map.put("footer", Config.collect().getFooter());
-		map.put("title", Config.collect().getTitle());
-		map.put("appUrl", Config.collect().getAppUrl());
-		/***/
-		if (centerServerConfig.getSslEnable()) {
-			map.put("app_protocol", "https:");
-		} else {
-			map.put("app_protocol", "http:");
-		}
-		/* 上面的无效 */
-		map.put("app_protocol", "auto");
-		if ((null != Config.portal().getLoginPage())
-				&& (BooleanUtils.isTrue(Config.portal().getLoginPage().getEnable()))) {
-			map.put(MAP_LOGINPAGE, Config.portal().getLoginPage());
-		} else if ((null != Config.person().getLoginPage())
-				&& (BooleanUtils.isTrue(Config.person().getLoginPage().getEnable()))) {
-			map.put(MAP_LOGINPAGE, Config.person().getLoginPage());
-		} else {
-			map.put(MAP_LOGINPAGE, Config.portal().getLoginPage());
-		}
-		map.put("indexPage", Config.portal().getIndexPage());
-		map.put("webSocketEnable", Config.communicate().wsEnable());
-		map.put("urlMapping", Config.portal().getUrlMapping());
-
-		/* 密码规则 */
-		map.put("passwordRegex", Config.person().getPasswordRegex());
-		map.put("passwordRegexHint", Config.person().getPasswordRegexHint());
-
-		/* RSA */
-		File publicKeyFile = new File(Config.base(), "config/public.key");
-		if (publicKeyFile.exists() && publicKeyFile.isFile()) {
-			String publicKey = FileUtils.readFileToString(publicKeyFile, "utf-8");
-			byte[] publicKeyB = Base64.decodeBase64(publicKey);
-			publicKey = new String(Base64.encodeBase64(publicKeyB));
-			map.put("publicKey", publicKey);
-		}
-		for (Entry<String, JsonElement> en : Config.web().entrySet()) {
-			map.put(en.getKey(), en.getValue());
-		}
-		FileUtils.writeStringToFile(file, gson.toJson(map), DefaultCharset.charset);
-	}
-
 	private static void createIndexPage() throws Exception {
 		if (null != Config.nodes().webServers()) {
 			StringBuffer buffer = new StringBuffer();