diff --git a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/WebServers.java b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/WebServers.java index fd4ad82f2715d372c63f726de1f5ca88ae93e0b8..c2ec0f726d5ead3bb285ac45780eb1c3d63a3a8e 100644 --- a/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/WebServers.java +++ b/o2server/x_base_core_project/src/main/java/com/x/base/core/project/config/WebServers.java @@ -1,9 +1,11 @@ package com.x.base.core.project.config; import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.SecureRandom; import java.util.ArrayList; import java.util.Collections; -import java.util.Comparator; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -12,9 +14,6 @@ import java.util.Objects; import java.util.Random; import java.util.concurrent.ConcurrentSkipListMap; -import com.x.base.core.project.connection.ActionResponse; -import com.x.base.core.project.connection.CipherConnectionAction; -import com.x.base.core.project.connection.ConnectionAction; import org.apache.commons.codec.binary.Base64; import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.BooleanUtils; @@ -33,6 +32,8 @@ public class WebServers extends ConcurrentSkipListMap { private static final String MAP_LOGINPAGE = "loginPage"; + private static final Random RANDOM = new SecureRandom(); + public WebServers() { super(); } @@ -40,15 +41,13 @@ public class WebServers extends ConcurrentSkipListMap { public WebServers(Nodes nodeConfigs) { for (Entry o : nodeConfigs.entrySet()) { WebServer server = o.getValue().getWeb(); - if (null != server) { - if (BooleanUtils.isTrue(server.getEnable())) { - this.put(o.getKey(), server); - } + if ((null != server) && BooleanUtils.isTrue(server.getEnable())) { + this.put(o.getKey(), server); } } } - public Entry getRandom() throws Exception { + public Entry getRandom() throws IllegalStateException { List> list = new ArrayList<>(); for (Entry o : this.entrySet()) { if (BooleanUtils.isTrue(o.getValue().getEnable())) { @@ -63,8 +62,8 @@ public class WebServers extends ConcurrentSkipListMap { for (Entry o : list) { total += o.getValue().getWeight(); } - Random random = new Random(); - int rdm = random.nextInt(total); + + int rdm = RANDOM.nextInt(total); int current = 0; for (Entry o : list) { current += o.getValue().getWeight(); @@ -72,15 +71,12 @@ public class WebServers extends ConcurrentSkipListMap { return o; } } - throw new Exception("randomWithWeight error."); + throw new IllegalStateException("randomWithWeight error."); } private void sortWithWeight(List> list) { - Collections.sort(list, new Comparator>() { - public int compare(Entry o1, Entry o2) { - return ObjectUtils.compare(o1.getValue().getWeight(), o2.getValue().getWeight(), true); - } - }); + Collections.sort(list, + (o1, o2) -> ObjectUtils.compare(o1.getValue().getWeight(), o2.getValue().getWeight(), true)); } public static void updateWebServerConfigJson() throws Exception { @@ -91,8 +87,11 @@ public class WebServers extends ConcurrentSkipListMap { Gson gson = XGsonBuilder.instance(); LinkedHashMap map = new LinkedHashMap<>(); - /** 覆盖掉配置的参数 */ - // 先取本节点的center如果没有那么取第一个center + /** + * 覆盖掉配置的参数 + *

+ * 先取本节点的center如果没有那么取第一个center + */ com.x.base.core.project.config.CenterServer centerServerConfig = Config.currentNode().getCenter(); List> centers = new ArrayList<>(); map.put("center", centers); @@ -127,45 +126,17 @@ public class WebServers extends ConcurrentSkipListMap { centers.add(center); } map.putAll(centerServerConfig.getConfig()); -// /** 写入center地址 */ -// Map center = new HashMap(); -// center.put("host", ""); -// center.put("port", centerServerConfig.getPort().toString()); -// centers.add(center); -// if (!Objects.equals(centerServerConfig.getProxyPort(), centerServerConfig.getPort())) { -// center = new HashMap(); -// center.put("host", ""); -// center.put("port", centerServerConfig.getProxyPort().toString()); -// centers.add(center); -// } -// -// String host = Config.nodes().primaryCenterNode(); -// if (!Host.isRollback(host)) { -// center = new HashMap(); -// center.put("host", host); -// center.put("port", centerServerConfig.getPort().toString()); -// centers.add(center); -// } -// /** 写入proxy地址 */ -// if (StringUtils.isNotEmpty(centerServerConfig.getProxyHost())) { -// center = new HashMap(); -// 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("version", Config.version()); map.put("appUrl", Config.collect().getAppUrl()); - /***/ - if (BooleanUtils.isTrue(centerServerConfig.getSslEnable())) { - map.put("app_protocol", "https:"); - } else { - map.put("app_protocol", "http:"); - } - /* 上面的无效 */ + /** + * if (BooleanUtils.isTrue(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()))) { @@ -180,24 +151,11 @@ public class WebServers extends ConcurrentSkipListMap { map.put("webSocketEnable", Config.communicate().wsEnable()); map.put("urlMapping", Config.portal().getUrlMapping()); - /* 密码规则 */ - map.put("passwordRegex", Config.person().getPasswordRegex()); - map.put("passwordRegexHint", Config.person().getPasswordRegexHint()); - /* 平台语言 */ - map.put("language", Config.person().getLanguage()); - /* 平台TokenName */ - map.put("tokenName", Config.person().getTokenName()); - /* 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); - } - - // 是否启用安全注销 - map.put("enableSafeLogout", Config.person().getEnableSafeLogout()); + writeWebServerConfigPasswordPolicy(map); + writeWebServerConfigLanguage(map); + writeWebServerConfigTokenName(map); + writeWebServerConfigRsa(map); + writeWebServerConfigSafeLogout(map); for (Entry en : Config.web().entrySet()) { map.put(en.getKey(), en.getValue()); @@ -205,6 +163,76 @@ public class WebServers extends ConcurrentSkipListMap { for (Entry en : Config.mock().entrySet()) { map.put(en.getKey(), en.getValue()); } + writeWebServerConfigProxyEnable(map, Config.currentNode().getWeb()); FileUtils.writeStringToFile(file, gson.toJson(map), DefaultCharset.charset); } + + /** + * 是否启用安全注销 + * + * @param map + * @throws Exception + */ + private static void writeWebServerConfigSafeLogout(LinkedHashMap map) throws Exception { + map.put("enableSafeLogout", Config.person().getEnableSafeLogout()); + } + + /** + * 如果启用了rsa加密,输出public.key + * + * @param map + * @throws Exception + * @throws IOException + */ + private static void writeWebServerConfigRsa(LinkedHashMap map) throws Exception { + File publicKeyFile = new File(Config.base(), "config/public.key"); + if (publicKeyFile.exists() && publicKeyFile.isFile()) { + String publicKey = FileUtils.readFileToString(publicKeyFile, StandardCharsets.UTF_8.name()); + byte[] publicKeyB = org.apache.commons.codec.binary.Base64.decodeBase64(publicKey); + publicKey = new String(Base64.encodeBase64(publicKeyB)); + map.put("publicKey", publicKey); + } + } + + /** + * 平台TokenName + * + * @param map + * @throws Exception + */ + private static void writeWebServerConfigTokenName(LinkedHashMap map) throws Exception { + map.put("tokenName", Config.person().getTokenName()); + } + + /** + * 平台语言 + * + * @param map + * @throws Exception + */ + private static void writeWebServerConfigLanguage(LinkedHashMap map) throws Exception { + map.put("language", Config.person().getLanguage()); + } + + /** + * 写入密码规则 + * + * @param map + * @throws Exception + */ + private static void writeWebServerConfigPasswordPolicy(LinkedHashMap map) throws Exception { + map.put("passwordRegex", Config.person().getPasswordRegex()); + map.put("passwordRegexHint", Config.person().getPasswordRegexHint()); + } + + /** + * 写入是否启用了center和application的代理 + * + * @param o + * @param webServer + */ + private static void writeWebServerConfigProxyEnable(Map o, WebServer webServer) { + o.put("proxyApplicationEnable", webServer.getProxyApplicationEnable()); + o.put("proxyCenterEnable", webServer.getProxyCenterEnable()); + } } diff --git a/o2server/x_console/src/main/java/com/x/server/console/server/web/WebServerTools.java b/o2server/x_console/src/main/java/com/x/server/console/server/web/WebServerTools.java index ce193ff4f80012a5c228f6bf1157f7bcfdd597f5..987989f8f326b78c7a3bacd75d454fea1b6a3f7b 100644 --- a/o2server/x_console/src/main/java/com/x/server/console/server/web/WebServerTools.java +++ b/o2server/x_console/src/main/java/com/x/server/console/server/web/WebServerTools.java @@ -71,11 +71,8 @@ public class WebServerTools extends JettySeverTools { WebAppContext context = new WebAppContext(); context.setContextPath("/"); context.setBaseResource(Resource.newResource(new File(Config.base(), "servers/webServer"))); - // context.setResourceBase("."); context.setParentLoaderPriority(true); context.setExtractWAR(false); - // context.setDefaultsDescriptor(new File(Config.base(), - // "commons/webdefault_w.xml").getAbsolutePath()); context.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "" + webServer.getDirAllowed()); context.setInitParameter("org.eclipse.jetty.servlet.Default.useFileMappedBuffer", "false"); if (webServer.getCacheControlMaxAge() > 0) { @@ -89,7 +86,7 @@ public class WebServerTools extends JettySeverTools { context.setParentLoaderPriority(true); context.getMimeTypes().addMimeMapping("wcss", "application/json"); /* stat */ - if (webServer.getStatEnable()) { + if (BooleanUtils.isTrue(webServer.getStatEnable())) { FilterHolder statFilterHolder = new FilterHolder(new WebStatFilter()); statFilterHolder.setInitParameter("exclusions", webServer.getStatExclusions()); context.addFilter(statFilterHolder, "/*", EnumSet.of(DispatcherType.REQUEST)); @@ -175,11 +172,6 @@ public class WebServerTools extends JettySeverTools { } } -// private static void updateWeb() throws Exception { -// Path path = Config.path_servers_webServer_x_desktop_res_config(true); -// Files.write(path.resolve("web.json"), XGsonBuilder.toJson(Config.web()).getBytes(StandardCharsets.UTF_8)); -// } - private static void updateFavicon() throws Exception { File file = new File(Config.dir_config(), "favicon.ico"); @@ -191,37 +183,31 @@ public class WebServerTools extends JettySeverTools { } private static void createIndexPage() throws Exception { - if (null != Config.nodes().webServers()) { - StringBuilder sb = new StringBuilder(); - sb.append(""); - sb.append(""); - sb.append(""); - sb.append(""); - sb.append("o2 index"); - sb.append(""); - sb.append(""); - for (Entry en : Config.nodes().webServers().entrySet()) { - WebServer o = en.getValue(); - if (BooleanUtils.isTrue(o.getEnable())) { - String url = BooleanUtils.isTrue(o.getSslEnable()) ? "https://" : "http://"; - url += en.getKey(); - if (BooleanUtils.isTrue(o.getSslEnable())) { - if (o.getPort() != 443) { - url += ":" + o.getPort(); - } - } else { - if (o.getPort() != 80) { - url += ":" + o.getPort(); - } - } - sb.append("" + url + "
"); - } + if (null == Config.nodes().webServers()) { + return; + } + StringBuilder sb = new StringBuilder(); + sb.append("").append("").append("").append("") + .append("o2 index").append("").append(""); + for (Entry en : Config.nodes().webServers().entrySet()) { + createIndexPagePerWebServer(sb, en); + } + sb.append("").append(""); + File file = new File(Config.base(), "index.html"); + FileUtils.write(file, sb.toString(), DefaultCharset.name); + } + private static void createIndexPagePerWebServer(StringBuilder sb, Entry en) { + WebServer o = en.getValue(); + if (BooleanUtils.isTrue(o.getEnable())) { + String url = BooleanUtils.isTrue(o.getSslEnable()) ? "https://" : "http://"; + url += en.getKey(); + if (BooleanUtils.isTrue(o.getSslEnable())) { + url += o.getPort() != 443 ? (":" + o.getPort()) : ""; + } else { + url += o.getPort() != 80 ? (":" + o.getPort()) : ""; } - sb.append(""); - sb.append(""); - File file = new File(Config.base(), "index.html"); - FileUtils.write(file, sb.toString(), DefaultCharset.name); + sb.append("" + url + "
"); } }