From ab4c4402df97c15000ae9562ea1a28f1f1ccf447 Mon Sep 17 00:00:00 2001 From: cym1102 Date: Sat, 7 Sep 2024 17:56:35 +0800 Subject: [PATCH] 4.2.4 --- README.md | 4 +- README_EN.md | 4 +- pom.xml | 10 +- .../controller/adminPage/ConfController.java | 140 +++++++++++++----- .../controller/adminPage/WwwController.java | 77 +++++++++- .../java/com/cym/service/ConfService.java | 4 +- src/main/java/com/cym/utils/ToolUtils.java | 16 +- .../WEB-INF/view/adminPage/conf/index.html | 4 +- .../WEB-INF/view/adminPage/header.html | 5 + src/main/resources/messages.properties | 2 + src/main/resources/messages_en_US.properties | 2 + src/main/resources/messages_zh_TW.properties | 2 + .../static/js/adminPage/conf/index.js | 22 ++- .../static/js/adminPage/www/index.js | 3 + src/test/java/com/cym/TestUtils.java | 31 +--- 15 files changed, 223 insertions(+), 103 deletions(-) diff --git a/README.md b/README.md index 1b54da8b..57f57081 100644 --- a/README.md +++ b/README.md @@ -111,9 +111,9 @@ Path : JDK安装目录\bin ``` Linux: mkdir /home/nginxWebUI/ - wget -O /home/nginxWebUI/nginxWebUI.jar https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.2/nginxWebUI-4.2.2.jar + wget -O /home/nginxWebUI/nginxWebUI.jar https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.4/nginxWebUI-4.2.4.jar -Windows: 直接使用浏览器下载 https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.2/nginxWebUI-4.2.2.jar 到 D:/home/nginxWebUI/nginxWebUI.jar +Windows: 直接使用浏览器下载 https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.4/nginxWebUI-4.2.4.jar 到 D:/home/nginxWebUI/nginxWebUI.jar ``` 有新版本只需要修改路径中的版本即可 diff --git a/README_EN.md b/README_EN.md index 3be0be37..cc1c0720 100644 --- a/README_EN.md +++ b/README_EN.md @@ -107,9 +107,9 @@ reboot ``` Linux: mkdir /home/nginxWebUI/ - wget -O /home/nginxWebUI/nginxWebUI.jar https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.2/nginxWebUI-4.2.2.jar + wget -O /home/nginxWebUI/nginxWebUI.jar https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.4/nginxWebUI-4.2.4.jar -Windows: Download directly from your browser https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.2/nginxWebUI-4.2.2.jar into D:/home/nginxWebUI/ +Windows: Download directly from your browser https://gitee.com/cym1102/nginxWebUI/releases/download/4.2.4/nginxWebUI-4.2.4.jar into D:/home/nginxWebUI/ ``` With a new version, you just need to change the version in the path diff --git a/pom.xml b/pom.xml index 4d406947..96870049 100644 --- a/pom.xml +++ b/pom.xml @@ -1,4 +1,6 @@ - + org.noear @@ -9,7 +11,7 @@ 4.0.0 com.cym nginxWebUI - 4.2.2 + 4.2.4 UTF-8 @@ -27,7 +29,7 @@ 1.6.2 2.13.1 3.0 - 0.5.10 + 0.5.11 @@ -67,7 +69,7 @@ h2 ${h2.version} - + org.xerial sqlite-jdbc diff --git a/src/main/java/com/cym/controller/adminPage/ConfController.java b/src/main/java/com/cym/controller/adminPage/ConfController.java index 5077b24d..3b8afe2b 100644 --- a/src/main/java/com/cym/controller/adminPage/ConfController.java +++ b/src/main/java/com/cym/controller/adminPage/ConfController.java @@ -1,8 +1,9 @@ package com.cym.controller.adminPage; import java.io.File; -import java.io.InputStream; import java.nio.charset.StandardCharsets; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -31,11 +32,10 @@ import cn.hutool.core.codec.Base64; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.io.resource.ClassPathResource; +import cn.hutool.core.io.file.PathUtil; import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.RuntimeUtil; import cn.hutool.core.util.StrUtil; -import cn.hutool.core.util.ZipUtil; import cn.hutool.json.JSONArray; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; @@ -269,22 +269,61 @@ public JsonResult check(String nginxPath, String nginxExe, String nginxDir, Stri @Mapping(value = "saveCmd") public JsonResult saveCmd(String nginxPath, String nginxExe, String nginxDir) { nginxPath = ToolUtils.handlePath(nginxPath); - settingService.set("nginxPath", nginxPath); - nginxExe = ToolUtils.handlePath(nginxExe); - settingService.set("nginxExe", nginxExe); - nginxDir = ToolUtils.handlePath(nginxDir); - settingService.set("nginxDir", nginxDir); + + if (StrUtil.isNotEmpty(nginxPath) && !isFile(nginxPath)) { + nginxPath = null; + } + if (StrUtil.isNotEmpty(nginxDir) && !isFile(nginxDir)) { + nginxDir = null; + } + if (StrUtil.isNotEmpty(nginxExe) && !isFile(nginxExe) && !isSafeCmd(nginxExe)) { + nginxExe = null; + } + if (StrUtil.isNotEmpty(nginxExe) && isFile(nginxExe) && !isSafeEnd(nginxExe)) { + nginxExe = null; + } + + if (nginxPath != null) { + settingService.set("nginxPath", nginxPath); + System.out.println("nginxPath -> " + nginxPath); + } + if (nginxExe != null) { + settingService.set("nginxExe", nginxExe); + System.out.println("nginxExe -> " + nginxExe); + } + if (nginxDir != null) { + settingService.set("nginxDir", nginxDir); + System.out.println("nginxDir -> " + nginxDir); + } Map map = new HashMap<>(); map.put("nginxPath", nginxPath); map.put("nginxExe", nginxExe); map.put("nginxDir", nginxDir); - + System.out.println(""); return renderSuccess(map); } + private boolean isSafeEnd(String nginxExe) { + return nginxExe.endsWith("nginx") // + || nginxExe.endsWith("openresty") // + || nginxExe.endsWith("nginx.exe") // + || nginxExe.endsWith("openrestys.exe"); + } + + private boolean isSafeCmd(String nginxExe) { + return nginxExe.equals("nginx") // + || nginxExe.equals("openresty") // + || nginxExe.equals("nginx.exe") // + || nginxExe.equals("openrestys.exe"); + } + + private boolean isFile(String path) { + return FileUtil.isDirectory(path) || FileUtil.isFile(path); + } + @Mapping(value = "reload") public synchronized JsonResult reload(String nginxPath, String nginxExe, String nginxDir) { if (nginxPath == null) { @@ -308,7 +347,7 @@ public synchronized JsonResult reload(String nginxPath, String nginxExe, String String rs = RuntimeUtil.execForStr(cmd); cmd = "" + cmd + ""; - if (!rs.contains("[error]")) { + if (!rs.contains("[error]") && !rs.contains("[emerg]")) { return renderSuccess(cmd + "
" + m.get("confStr.reloadSuccess") + "
" + rs.replace("\n", "
")); } else { if (rs.contains("The system cannot find the file specified") || rs.contains("nginx.pid") || rs.contains("PID")) { @@ -331,7 +370,8 @@ public JsonResult runCmd(String cmd, String type) { } // 仅执行nginx相关的命令,而不是其他的恶意命令 - if (!isAvailableCmd(cmd)) { + cmd = buildRealCmd(cmd); + if (StrUtil.isEmpty(cmd)) { return renderSuccess(m.get("confStr.notAvailableCmd")); } @@ -359,17 +399,12 @@ public JsonResult runCmd(String cmd, String type) { } } - // 仅执行nginx相关的命令,而不是其他的恶意命令 - private boolean isAvailableCmd(String cmd) { - // 过滤数据库中的路径 - String nginxPath = ToolUtils.handleConf(settingService.get("nginxPath")); - settingService.set("nginxPath", nginxPath); - String nginxExe = ToolUtils.handleConf(settingService.get("nginxExe")); - settingService.set("nginxExe", nginxExe); - String nginxDir = ToolUtils.handleConf(settingService.get("nginxDir")); - settingService.set("nginxDir", nginxDir); + private String buildRealCmd(String cmd) { + String dir = ""; + if (StrUtil.isNotEmpty(settingService.get("nginxDir"))) { + dir = " -p " + settingService.get("nginxDir"); + } - // 检查命令格式 switch (cmd) { case "net start nginx": case "service nginx start": @@ -379,27 +414,58 @@ private boolean isAvailableCmd(String cmd) { case "systemctl stop nginx": case "taskkill /f /im nginx.exe": case "pkill nginx": - return true; - default: - break; - } - - String dir = ""; - if (StrUtil.isNotEmpty(settingService.get("nginxDir"))) { - dir = " -p " + settingService.get("nginxDir"); - } + return cmd; - if (cmd.equals(settingService.get("nginxExe") + " -s stop" + dir)) { - return true; + case "stopNormal": + return settingService.get("nginxExe") + " -s stop" + dir; + case "startNormal": + return settingService.get("nginxExe") + " -c " + settingService.get("nginxPath") + dir; } - if (cmd.equals(settingService.get("nginxExe") + " -c " + settingService.get("nginxPath") + dir)) { - return true; - } - - return false; + return null; } +// // 仅执行nginx相关的命令,而不是其他的恶意命令 +// private boolean isAvailableCmd(String cmd) { +// // 过滤数据库中的路径 +// String nginxPath = ToolUtils.handleConf(settingService.get("nginxPath")); +// settingService.set("nginxPath", nginxPath); +// String nginxExe = ToolUtils.handleConf(settingService.get("nginxExe")); +// settingService.set("nginxExe", nginxExe); +// String nginxDir = ToolUtils.handleConf(settingService.get("nginxDir")); +// settingService.set("nginxDir", nginxDir); +// +// // 检查命令格式 +// switch (cmd) { +// case "net start nginx": +// case "service nginx start": +// case "systemctl start nginx": +// case "net stop nginx": +// case "service nginx stop": +// case "systemctl stop nginx": +// case "taskkill /f /im nginx.exe": +// case "pkill nginx": +// return true; +// default: +// break; +// } +// +// String dir = ""; +// if (StrUtil.isNotEmpty(settingService.get("nginxDir"))) { +// dir = " -p " + settingService.get("nginxDir"); +// } +// +// if (cmd.equals(settingService.get("nginxExe") + " -s stop" + dir)) { +// return true; +// } +// +// if (cmd.equals(settingService.get("nginxExe") + " -c " + settingService.get("nginxPath") + dir)) { +// return true; +// } +// +// return false; +// } + @Mapping(value = "getLastCmd") public JsonResult getLastCmd(String type) { return renderSuccess(settingService.get(type)); diff --git a/src/main/java/com/cym/controller/adminPage/WwwController.java b/src/main/java/com/cym/controller/adminPage/WwwController.java index 0292f80f..b44329b0 100644 --- a/src/main/java/com/cym/controller/adminPage/WwwController.java +++ b/src/main/java/com/cym/controller/adminPage/WwwController.java @@ -1,8 +1,15 @@ package com.cym.controller.adminPage; +import java.io.File; +import java.io.FileInputStream; +import java.io.IOException; import java.net.URL; import java.nio.charset.Charset; +import java.util.zip.ZipEntry; +import java.util.zip.ZipFile; +import java.util.zip.ZipInputStream; +import cn.hutool.core.util.CharsetUtil; import cn.hutool.core.util.StrUtil; import org.noear.solon.annotation.Controller; import org.noear.solon.annotation.Inject; @@ -43,12 +50,19 @@ public JsonResult addOver(Www www, String dirTemp) { } try { -// FileUtil.clean(www.getDir()); //太危险不要删了文件夹了 + try { + if (!checkZipSafe(dirTemp, www.getDir(), CharsetUtil.defaultCharset())) { + return renderError(m.get("wwwStr.zipNotSafe")); + } + } catch (IllegalArgumentException e) { + if (!checkZipSafe(dirTemp, www.getDir(), Charset.forName("GBK"))) { + return renderError(m.get("wwwStr.zipNotSafe")); + } + } try { ZipUtil.unzip(dirTemp, www.getDir()); - } catch (Exception e) { - // 默认UTF-8下不能解压中文字符, 尝试使用gbk + } catch (IllegalArgumentException e) { ZipUtil.unzip(dirTemp, www.getDir(), Charset.forName("GBK")); } @@ -63,20 +77,69 @@ public JsonResult addOver(Www www, String dirTemp) { return renderError(m.get("wwwStr.zipError")); } - + + /** + * 检查zip是否包含../目录 + * + * @param dirTemp + * @param dir + * @param charset + * @return + */ + private boolean checkZipSafe(String dirTemp, String dir, Charset charset) { + File zipFile = new File(dirTemp); + File outputFolder = new File(dir); + ZipInputStream zis = null; + + try { + zis = new ZipInputStream(new FileInputStream(zipFile), charset); + ZipEntry entry = null; + while ((entry = zis.getNextEntry()) != null) { + String name = entry.getName(); + // 检查并阻止任何尝试跳转到父目录的尝试 + if (name.contains("..") || name.startsWith("/") || name.startsWith("\\")) { + return false; + } + + // 通常还需要检查解压后文件的完整路径,以确保它仍然位于输出文件夹内 + File file = new File(outputFolder, name); + if (!file.getCanonicalPath().startsWith(outputFolder.getCanonicalPath())) { + return false; + } + } + } catch (IllegalArgumentException e) { + logger.error(e.getMessage(), e); + throw e; + } catch (IOException e) { + logger.error(e.getMessage(), e); + return false; + } finally { + try { + if (zis != null) { + zis.close(); + } + } catch (IOException e) { + logger.error(e.getMessage(), e); + } + } + + return true; + + } + @Mapping("clean") public JsonResult clean(String id) { Www www = sqlHelper.findById(id, Www.class); - + FileUtil.clean(www.getDir()); - + return renderSuccess(); } @Mapping("del") public JsonResult del(String id) { String[] ids = id.split(","); - + sqlHelper.deleteByIds(ids, Www.class); return renderSuccess(); diff --git a/src/main/java/com/cym/service/ConfService.java b/src/main/java/com/cym/service/ConfService.java index d1545969..b71b7cb5 100644 --- a/src/main/java/com/cym/service/ConfService.java +++ b/src/main/java/com/cym/service/ConfService.java @@ -325,8 +325,6 @@ public void buildDenyAllow(NgxBlock ngxBlock, String type, String id, ConfExt co List strs = new ArrayList<>(); if (denyAllowValue == 1) { // 黑名单 - strs.add("allow all;"); - DenyAllow denyAllow = sqlHelper.findById(denyId, DenyAllow.class); if (denyAllow != null) { String[] ips = denyAllow.getIp().split("\n"); @@ -334,6 +332,8 @@ public void buildDenyAllow(NgxBlock ngxBlock, String type, String id, ConfExt co strs.add("deny " + ip.trim() + ";"); } } + + strs.add("allow all;"); } if (denyAllowValue == 2) { // 白名单 diff --git a/src/main/java/com/cym/utils/ToolUtils.java b/src/main/java/com/cym/utils/ToolUtils.java index d4c81163..693e7ae6 100644 --- a/src/main/java/com/cym/utils/ToolUtils.java +++ b/src/main/java/com/cym/utils/ToolUtils.java @@ -27,19 +27,9 @@ public static String handlePath(String path) { if (StrUtil.isEmpty(path)) { return path; } - return path.replace("\\", "/") // - .replace("//", "/") // - // 删除 ? - // 删除 <> - // 删除 | - // 删除 " - // 删除 # - // 删除 & - // 删除 ; - // 删除 ' - // 删除 ` - // 删除 空格 - .replaceAll("[\\s?<>|\"#&;'`]", ""); + return path.replace("\\", "/") // 替换反斜杠 + .replace("//", "/") // 替换双斜杠 + .replaceAll("[\\s?<>|\"#&;'`]", ""); // 删除空格和特殊字符 } /** diff --git a/src/main/resources/WEB-INF/view/adminPage/conf/index.html b/src/main/resources/WEB-INF/view/adminPage/conf/index.html index 81779ae3..f8bf280c 100644 --- a/src/main/resources/WEB-INF/view/adminPage/conf/index.html +++ b/src/main/resources/WEB-INF/view/adminPage/conf/index.html @@ -157,7 +157,7 @@
-
+



@@ -168,7 +168,7 @@
-
+



diff --git a/src/main/resources/WEB-INF/view/adminPage/header.html b/src/main/resources/WEB-INF/view/adminPage/header.html index c997f3da..002d8537 100644 --- a/src/main/resources/WEB-INF/view/adminPage/header.html +++ b/src/main/resources/WEB-INF/view/adminPage/header.html @@ -1,6 +1,11 @@
    + +
  • + ${commonStr.pro} +
  • +
  • ${commonStr.currentUser}: ${admin.name}
  • diff --git a/src/main/resources/messages.properties b/src/main/resources/messages.properties index 065b6ceb..31206ce5 100644 --- a/src/main/resources/messages.properties +++ b/src/main/resources/messages.properties @@ -145,6 +145,7 @@ commonStr.operation = \u64CD\u4F5C commonStr.path = \u8DEF\u5F84 commonStr.pleaseSelect = --\u8BF7\u9009\u62E9-- commonStr.preview = \u9884\u89C8 +commonStr.pro = \uD83D\uDD25\u4F7F\u7528\u4E13\u4E1A\u7248\uD83D\uDD25 commonStr.search = \u641C\u7D22 commonStr.selectFile = \u9009\u62E9\u6587\u4EF6 commonStr.selectPath = \u9009\u62E9\u5DF2\u6709\u6587\u4EF6 @@ -620,5 +621,6 @@ wwwStr.select = \u9009\u62E9zip\u6587\u4EF6 wwwStr.tips = \u6CE8\u610F\uFF1A\u8BF7\u6CE8\u610F\u76EE\u5F55\u548Czip\u8BF7\u4E0D\u8981\u4F7F\u7528\u4E2D\u6587\uFF0C\u6DFB\u52A0\u5B8C\u6210\u540E\u76EE\u5F55\u5185\u6587\u4EF6\u4F1A\u88AB\u6E05\u7A7A\u8986\u76D6\uFF0C\u8BF7\u6CE8\u610F\u5907\u4EFD wwwStr.upload = \u4E0A\u4F20zip\u5305 wwwStr.zipError = \u89E3\u538B\u9519\u8BEF\uFF0C\u8BF7\u786E\u8BA4\u538B\u7F29\u5305\u4E3Azip\u683C\u5F0F +wwwStr.zipNotSafe = \u538B\u7F29\u5305\u5185\u5305\u542B../\u7B49\u5371\u9669\u8DEF\u5F84 xmselectStr.tips = \u8BF7\u9009\u62E9 diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index 9720a0a9..4fed2afd 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -145,6 +145,7 @@ commonStr.operation = Operation commonStr.path = Path commonStr.pleaseSelect = --Please select-- commonStr.preview = Preview +commonStr.pro = \uD83D\uDD25Professional Edition\uD83D\uDD25 commonStr.search = Search commonStr.selectFile = Select file commonStr.selectPath = Select existing file @@ -620,5 +621,6 @@ wwwStr.select = Select zip file wwwStr.tips = Note: After adding, the files in the directory will be overwritten. Please pay attention to backup. wwwStr.upload = Upload zip package wwwStr.zipError = Unzip error, please confirm the zip format of the package. +wwwStr.zipNotSafe = Compressed package contains... / and other dangerous paths xmselectStr.tips = Please select diff --git a/src/main/resources/messages_zh_TW.properties b/src/main/resources/messages_zh_TW.properties index 615a913c..998bd658 100644 --- a/src/main/resources/messages_zh_TW.properties +++ b/src/main/resources/messages_zh_TW.properties @@ -145,6 +145,7 @@ commonStr.operation = \u64CD\u4F5C commonStr.path = \u8DEF\u5F91 commonStr.pleaseSelect = --\u8ACB\u9078\u64C7-- commonStr.preview = \u9810\u89BD +commonStr.pro = \uD83D\uDD25\u4F7F\u7528\u5C08\u696D\u7248\uD83D\uDD25 commonStr.search = \u641C\u7D22 commonStr.selectFile = \u9078\u64C7\u6587\u4EF6 commonStr.selectPath = \u9078\u64C7\u5DF2\u6709\u6587\u4EF6 @@ -620,5 +621,6 @@ wwwStr.select = \u9078\u64C7zip\u6587\u4EF6 wwwStr.tips = \u8A3B\u610F\uFF1A\u8ACB\u8A3B\u610F\u76EE\u9304\u548Czip\u8ACB\u4E0D\u8981\u4F7F\u7528\u4E2D\u6587\uFF0C\u6DFB\u52A0\u5B8C\u6210\u5F8C\u76EE\u9304\u5167\u6587\u4EF6\u6703\u88AB\u6E05\u7A7A\u8986\u84CB\uFF0C\u8ACB\u8A3B\u610F\u5099\u4EFD wwwStr.upload = \u4E0A\u50B3zip\u5305 wwwStr.zipError = \u89E3\u58D3\u7E2E\u932F\u8AA4\uFF0C\u8ACB\u78BA\u8A8D\u58D3\u7E2E\u5305\u70BAzip\u683C\u5F0F +wwwStr.zipNotSafe = \u58D3\u7E2E\u5305\u5167\u5305\u542B../\u7B49\u5371\u96AA\u8DEF\u5F91 xmselectStr.tips = \u8ACB\u9078\u64C7 diff --git a/src/main/resources/static/js/adminPage/conf/index.js b/src/main/resources/static/js/adminPage/conf/index.js index 9c8b1752..1450334c 100644 --- a/src/main/resources/static/js/adminPage/conf/index.js +++ b/src/main/resources/static/js/adminPage/conf/index.js @@ -283,11 +283,10 @@ function saveCmd() { dataType: 'json', success: function(data) { if (data.success) { - var map = data.obj; - $("#nginxExe").val(map.nginxExe); - $("#nginxDir").val(map.nginxDir); - $("#nginxPath").val(map.nginxPath); - + //var map = data.obj; + //$("#nginxExe").val(map.nginxExe); + //$("#nginxDir").val(map.nginxDir); + //$("#nginxPath").val(map.nginxPath); } }, error: function() { @@ -382,7 +381,7 @@ function runCmd(type) { $("#stopNormal").prop("checked", true); $("#nginxStop input[name='cmd']").each(function() { - if ($(this).attr("title") == cmd) { + if ($(this).attr("title") == cmd || $(this).attr("id") == cmd) { $(this).prop("checked", true); } }) @@ -391,7 +390,7 @@ function runCmd(type) { $("#startNormal").prop("checked", true); $("#nginxStart input[name='cmd']").each(function() { - if ($(this).attr("title") == cmd) { + if ($(this).attr("title") == cmd || $(this).attr("id") == cmd) { $(this).prop("checked", true); } }) @@ -423,7 +422,14 @@ function runCmdOver() { var type = ""; $("input[name='cmd']").each(function() { if ($(this).prop("checked")) { - cmd = $(this).attr("title"); + if ($(this).attr("id") == 'stopNormal') { + cmd = "stopNormal"; + } else if ($(this).attr("id") == 'startNormal') { + cmd = "startNormal"; + } else { + cmd = $(this).attr("title"); + } + type = $(this).attr("lang"); } }) diff --git a/src/main/resources/static/js/adminPage/www/index.js b/src/main/resources/static/js/adminPage/www/index.js index d0c626c7..bb848a51 100644 --- a/src/main/resources/static/js/adminPage/www/index.js +++ b/src/main/resources/static/js/adminPage/www/index.js @@ -81,12 +81,14 @@ function addOver() { layer.alert(wwwStr.noUpload); return; } + showLoad(); $.ajax({ type: 'POST', url: ctx + '/adminPage/www/addOver', data: $('#addForm').serialize(), dataType: 'json', success: function(data) { + closeLoad(); if (data.success) { location.reload(); } else { @@ -94,6 +96,7 @@ function addOver() { } }, error: function() { + closeLoad(); layer.alert(commonStr.errorInfo); } }); diff --git a/src/test/java/com/cym/TestUtils.java b/src/test/java/com/cym/TestUtils.java index 2c4d9a92..5e06fff0 100644 --- a/src/test/java/com/cym/TestUtils.java +++ b/src/test/java/com/cym/TestUtils.java @@ -1,9 +1,9 @@ package com.cym; -import java.io.File; +import java.io.FileOutputStream; import java.io.IOException; -import java.util.HashMap; -import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipOutputStream; import org.junit.Ignore; import org.junit.Test; @@ -12,8 +12,6 @@ import org.noear.solon.test.SolonJUnit4ClassRunner; import org.noear.solon.test.SolonTest; -import cn.hutool.core.io.FileUtil; - @RunWith(SolonJUnit4ClassRunner.class) @SolonTest(NginxWebUI.class) public class TestUtils extends HttpTester { @@ -21,29 +19,10 @@ public class TestUtils extends HttpTester { @Ignore public void test() { - StringBuilder pass = new StringBuilder(1000); - for (int i = 0; i < 2000000; i++) { - pass.append("abcde12345"); - } - - Map map = new HashMap<>(); - map.put("name", "admin"); - map.put("pass", pass.toString()); - - System.out.println("pass.length: " + pass.length()); - - try { - String rs = path("/adminPage/login/login").data(map).post(); - System.err.println(rs); - assert false; - } catch (IOException e) { - assert true; - } } - public static void main(String[] args) { - File file = new File("d:/home/"); - System.out.println(file.listFiles()); + public static void main(String[] args) throws Exception { + } } \ No newline at end of file