diff --git a/server/src/main/config/application.properties b/server/src/main/config/application.properties index 74156404..c820771e 100644 --- a/server/src/main/config/application.properties +++ b/server/src/main/config/application.properties @@ -2,8 +2,9 @@ server.port = ${KK_SERVER_PORT:8012} server.servlet.context-path= ${KK_CONTEXT_PATH:/} server.servlet.encoding.charset = utf-8 -#文件上传限制 +#文件上传限制前端 spring.servlet.multipart.max-file-size=500MB +#文件上传限制 spring.servlet.multipart.max-request-size=500MB ## Freemarker 配置 spring.freemarker.template-loader-path = classpath:/web/ @@ -117,3 +118,9 @@ watermark.angle = ${WATERMARK_ANGLE:10} #Tif类型图片浏览模式:tif(利用前端js插件浏览);jpg(转换为jpg后前端显示);pdf(转换为pdf后显示,便于打印) tif.preview.type = ${KK_TIF_PREVIEW_TYPE:tif} +# 备案信息 +BeiAn = +#禁止上传类型 +prohibit =exe,dll,dat +#删除密码 +sc.password =123456 diff --git a/server/src/main/java/cn/keking/config/ConfigConstants.java b/server/src/main/java/cn/keking/config/ConfigConstants.java index 4ad5a797..6d40765d 100644 --- a/server/src/main/java/cn/keking/config/ConfigConstants.java +++ b/server/src/main/java/cn/keking/config/ConfigConstants.java @@ -42,6 +42,10 @@ public class ConfigConstants { private static String pdfBookmarkDisable; private static Boolean fileUploadDisable; private static String tifPreviewType; + private static String BeiAn; + private static String[] prohibit= {}; + private static String size; + private static String password; public static final String DEFAULT_CACHE_ENABLED = "true"; public static final String DEFAULT_TXT_TYPE = "txt,html,htm,asp,jsp,xml,json,properties,md,gitignore,log,java,py,c,cpp,sql,sh,bat,m,bas,prg,cmd"; @@ -62,6 +66,10 @@ public class ConfigConstants { public static final String DEFAULT_PDF_BOOKMARK_DISABLE = "true"; public static final String DEFAULT_FILE_UPLOAD_DISABLE = "false"; public static final String DEFAULT_TIF_PREVIEW_TYPE = "tif"; + public static final String DEFAULT_BeiAn_DISABLE = "无"; + public static final String DEFAULT_size_DISABLE = "500MB"; + public static final String DEFAULT_prohibit_DISABLE = "exe,dll"; + public static final String DEFAULT_password_DISABLE = "123456"; public static Boolean isCacheEnabled() { return cacheEnabled; @@ -353,4 +361,49 @@ public class ConfigConstants { public static void setTifPreviewTypeValue(String tifPreviewType) { ConfigConstants.tifPreviewType = tifPreviewType; } + + public static String getBeiAn() { + return BeiAn; + } + @Value("${BeiAn:无}") + public void setBeiAn(String BeiAn) { + setBeiAnValue(BeiAn); + } + public static void setBeiAnValue(String BeiAn) { + ConfigConstants.BeiAn = BeiAn; + } + public static String[] getprohibit() { + return prohibit; + } + @Value("${prohibit:exe,dll}") + public void setprohibit(String prohibit) { + String[] prohibittArr = prohibit.split(","); + setprohibitValue(prohibittArr); + } + + public static void setprohibitValue(String[] prohibit) { + ConfigConstants.prohibit = prohibit; + } + public static String maxsize() { + return size; + } + @Value("${spring.servlet.multipart.max-file-size:500MB}") + public void setsize(String size) { + setsizeValue(size); + } + public static void setsizeValue(String size) { + ConfigConstants.size = size; + } + + public static String getpassword() { + return password; + } + @Value("${sc.password:123456}") + public void setpassword(String password) { + setpasswordValue(password); + } + public static void setpasswordValue(String password) { + ConfigConstants.password = password; + } + } diff --git a/server/src/main/java/cn/keking/config/ConfigRefreshComponent.java b/server/src/main/java/cn/keking/config/ConfigRefreshComponent.java index 84154617..d3cfcb83 100644 --- a/server/src/main/java/cn/keking/config/ConfigRefreshComponent.java +++ b/server/src/main/java/cn/keking/config/ConfigRefreshComponent.java @@ -53,7 +53,11 @@ public class ConfigRefreshComponent { String pdfBookmarkDisable; boolean fileUploadDisable; String tifPreviewType; - + String prohibit; + String[] prohibitArray; + String BeiAn; + String size; + String password; while (true) { FileReader fileReader = new FileReader(configFilePath); BufferedReader bufferedReader = new BufferedReader(fileReader); @@ -78,6 +82,11 @@ public class ConfigRefreshComponent { pdfBookmarkDisable = properties.getProperty("pdf.bookmark.disable", ConfigConstants.DEFAULT_PDF_BOOKMARK_DISABLE); fileUploadDisable = Boolean.parseBoolean(properties.getProperty("file.upload.disable", ConfigConstants.DEFAULT_FILE_UPLOAD_DISABLE)); tifPreviewType = properties.getProperty("tif.preview.type", ConfigConstants.DEFAULT_TIF_PREVIEW_TYPE); + size = properties.getProperty("spring.servlet.multipart.max-file-size", ConfigConstants.DEFAULT_size_DISABLE); + BeiAn = properties.getProperty("BeiAn", ConfigConstants.DEFAULT_BeiAn_DISABLE); + prohibit = properties.getProperty("prohibit", ConfigConstants.DEFAULT_prohibit_DISABLE); + password = properties.getProperty("sc.password", ConfigConstants.DEFAULT_password_DISABLE); + prohibitArray = prohibit.split(","); ConfigConstants.setCacheEnabledValueValue(cacheEnabled); ConfigConstants.setSimTextValue(textArray); @@ -96,6 +105,10 @@ public class ConfigRefreshComponent { ConfigConstants.setPdfBookmarkDisableValue(pdfBookmarkDisable); ConfigConstants.setFileUploadDisableValue(fileUploadDisable); ConfigConstants.setTifPreviewTypeValue(tifPreviewType); + ConfigConstants.setBeiAnValue(BeiAn); + ConfigConstants.setsizeValue(size); + ConfigConstants.setprohibitValue(prohibitArray); + ConfigConstants.setpasswordValue(password); setWatermarkConfig(properties); bufferedReader.close(); fileReader.close(); diff --git a/server/src/main/java/cn/keking/utils/DownloadUtils.java b/server/src/main/java/cn/keking/utils/DownloadUtils.java index c4a17383..69c08b17 100644 --- a/server/src/main/java/cn/keking/utils/DownloadUtils.java +++ b/server/src/main/java/cn/keking/utils/DownloadUtils.java @@ -49,6 +49,12 @@ public class DownloadUtils { logger.error("忽略SSL证书异常:", e); } ReturnResponse response = new ReturnResponse<>(0, "下载成功!!!", ""); + if (!KkFileUtils.isAllowedUpload(fileName)) { + response.setCode(1); + response.setContent(null); + response.setMsg("下载失败:不支持的类型!" + urlStr); + return response; + } assert urlStr != null; if (urlStr.contains("?fileKey=")) { response.setContent(fileDir + urlStrr); diff --git a/server/src/main/java/cn/keking/utils/KkFileUtils.java b/server/src/main/java/cn/keking/utils/KkFileUtils.java index aa7a8bfe..b4785565 100644 --- a/server/src/main/java/cn/keking/utils/KkFileUtils.java +++ b/server/src/main/java/cn/keking/utils/KkFileUtils.java @@ -1,7 +1,9 @@ package cn.keking.utils; +import cn.keking.config.ConfigConstants; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import org.springframework.util.ObjectUtils; import org.springframework.util.StringUtils; import org.springframework.web.util.HtmlUtils; @@ -174,4 +176,19 @@ public class KkFileUtils { return true; } + /** + * 判断文件是否允许上传 + * + * @param file 文件扩展名 + * @return 是否允许上传 + */ + public static boolean isAllowedUpload(String file) { + String fileType = suffixFromFileName(file); + for (String type : ConfigConstants.getprohibit()) { + if (type.equals(fileType)) + return false; + } + return !ObjectUtils.isEmpty(fileType); + } + } diff --git a/server/src/main/java/cn/keking/web/controller/FileController.java b/server/src/main/java/cn/keking/web/controller/FileController.java index b9bb5f47..6d726fc6 100644 --- a/server/src/main/java/cn/keking/web/controller/FileController.java +++ b/server/src/main/java/cn/keking/web/controller/FileController.java @@ -36,7 +36,6 @@ public class FileController { private final String demoDir = "demo"; private final String demoPath = demoDir + File.separator; public static final String BASE64_DECODE_ERROR_MSG = "Base64解码失败,请检查你的 %s 是否采用 Base64 + urlEncode 双重编码了!"; - private static final String[] not_allowed = { "dll", "exe", "msi" }; // 不允许上传的文件扩展名 @PostMapping("/fileUpload") public ReturnResponse fileUpload(@RequestParam("file") MultipartFile file) { @@ -60,12 +59,16 @@ public class FileController { } @GetMapping("/deleteFile") - public ReturnResponse deleteFile(String fileName) { + public ReturnResponse deleteFile(String fileName,String password) { ReturnResponse checkResult = this.deleteFileCheck(fileName); if (checkResult.isFailure()) { return checkResult; } - fileName = checkResult.getContent().toString(); + fileName = checkResult.getContent().toString(); + if(!ConfigConstants.getpassword().equalsIgnoreCase(password)){ + logger.error("删除文件【{}】失败,密码错误!",fileName); + return ReturnResponse.failure("删除文件失败,密码错误!"); + } File file = new File(fileDir + demoPath + fileName); logger.info("删除文件:{}", file.getAbsolutePath()); if (file.exists() && !file.delete()) { @@ -103,8 +106,10 @@ public class FileController { return ReturnResponse.failure("文件传接口已禁用"); } String fileName = WebUtils.getFileNameFromMultipartFile(file); - - if (!isAllowedUpload(fileName)) { + if(fileName.lastIndexOf(".")==-1){ + return ReturnResponse.failure("不允许上传的类型"); + } + if (!KkFileUtils.isAllowedUpload(fileName)) { return ReturnResponse.failure("不允许上传的文件类型: " + fileName); } if (KkFileUtils.isIllegalFileName(fileName)) { @@ -117,20 +122,6 @@ public class FileController { return ReturnResponse.success(fileName); } - /** - * 判断文件是否允许上传 - * - * @param file 文件扩展名 - * @return 是否允许上传 - */ - private boolean isAllowedUpload(String file) { - String fileType = KkFileUtils.suffixFromFileName(file); - for (String type : not_allowed) { - if (type.equals(fileType)) - return false; - } - return !ObjectUtils.isEmpty(fileType); - } /** * 删除文件前校验 diff --git a/server/src/main/java/cn/keking/web/filter/AttributeSetFilter.java b/server/src/main/java/cn/keking/web/filter/AttributeSetFilter.java index bce3c936..befcdea7 100644 --- a/server/src/main/java/cn/keking/web/filter/AttributeSetFilter.java +++ b/server/src/main/java/cn/keking/web/filter/AttributeSetFilter.java @@ -40,6 +40,8 @@ public class AttributeSetFilter implements Filter { request.setAttribute("fileKey", httpRequest.getParameter("fileKey")); request.setAttribute("switchDisabled", ConfigConstants.getOfficePreviewSwitchDisabled()); request.setAttribute("fileUploadDisable", ConfigConstants.getFileUploadDisable()); + request.setAttribute("BeiAn", ConfigConstants.getBeiAn()); + request.setAttribute("size", ConfigConstants.maxsize()); } /** diff --git a/server/src/main/resources/web/main/index.ftl b/server/src/main/resources/web/main/index.ftl index 2980ac3f..fb977325 100644 --- a/server/src/main/resources/web/main/index.ftl +++ b/server/src/main/resources/web/main/index.ftl @@ -116,33 +116,10 @@
<#if fileUploadDisable == false> -
+
-
-

-
-
- -
-
- -
-
-
-
- - - -
- + +
@@ -175,22 +152,34 @@
+
+
+ ${BeiAn} +
+