From 4470052c3b6bdeb18e45987f8aa293d1e93d0552 Mon Sep 17 00:00:00 2001
From: Ludc <2870569285@qq.com>
Date: 星期二, 18 十一月 2025 11:59:12 +0800
Subject: [PATCH] 所有文件上传接口增加文件安全校验逻辑。

---
 Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java |   63 +++++++++++++++++++++++++------
 1 files changed, 50 insertions(+), 13 deletions(-)

diff --git a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
index 540cb51..623570c 100644
--- a/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
+++ b/Source/UBCS/ubcs-service/ubcs-code/src/main/java/com/vci/ubcs/code/controller/MdmEngineController.java
@@ -1,6 +1,5 @@
 package com.vci.ubcs.code.controller;
 
-
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.nacos.common.utils.StringUtils;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -11,6 +10,7 @@
 import com.vci.ubcs.code.service.MdmEngineService;
 import com.vci.ubcs.code.service.MdmIOService;
 import com.vci.ubcs.code.vo.pagemodel.*;
+import com.vci.ubcs.common.validator.ComprehensiveFileValidator;
 import com.vci.ubcs.flow.core.dto.FlowStatusDTO;
 import com.vci.ubcs.starter.annotation.VciBusinessLog;
 import com.vci.ubcs.starter.revision.model.BaseModel;
@@ -33,11 +33,9 @@
 import java.io.File;
 import java.io.IOException;
 import java.nio.charset.StandardCharsets;
-import java.rmi.ServerException;
 import java.util.*;
 
 @RestController
-//@AllArgsConstructor
 @RequestMapping("/mdmEngineController")
 @Api(value = "缂栫爜鏁版嵁绠$悊", tags = "缂栫爜鏁版嵁绠$悊")
 public class MdmEngineController {
@@ -46,21 +44,31 @@
 	 * 鏃ュ織
 	 */
 	private Logger logger = LoggerFactory.getLogger(getClass());
+
 	/**
 	 * 涓绘暟鎹紩鎿庢湇鍔�
 	 */
 	@Autowired
 	private MdmEngineService engineService;
+
 	/**
 	 * 涓绘暟鎹鍏ュ鍑烘湇鍔�
 	 */
 	@Autowired
 	private MdmIOService mdmIOService;
+
 	/**
 	 * 鏃ュ織淇濆瓨宸ュ叿绫�
 	 */
 	@Autowired
 	private SaveLogUtil saveLogUtil;
+
+	/**
+	 * 鏂囦欢瀹夊叏妫�鏌�
+	 */
+	@Autowired
+	private ComprehensiveFileValidator fileValidator;
+
 
 	/**
 	 * 涓嬭浇鎵归噺鐢宠鐨勫鍏ユā鏉�
@@ -115,6 +123,12 @@
 	@VciBusinessLog(operateName = "瀵煎叆鎵归噺缂栬緫鏁版嵁")
 	@PostMapping("/batchImportEdit")
 	public R batchImportEdit(String codeClassifyOid, String classifyAttr,MultipartFile file,HttpServletResponse response) throws Throwable {
+		// 浣跨敤鏂囦欢瀹夊叏楠岃瘉鍣�
+		ComprehensiveFileValidator.UploadValidationResult validationResult = fileValidator.validateFile(file);
+		if (!validationResult.isValid()) {
+			return R.fail(validationResult.getMessage());
+		}
+
 		String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + file.getOriginalFilename();
 		File file1 = new File(excelFileName);
 		try {
@@ -221,6 +235,12 @@
 	@VciBusinessLog(operateName = "鎵归噺鐢宠缂栫爜鐨勪俊鎭�")
 	@PostMapping("/batchImportCode")
 	public R batchImportCode(String secDTOList, String codeClassifyOid, MultipartFile file, HttpServletResponse response) throws Throwable {
+		// 浣跨敤鏂囦欢瀹夊叏楠岃瘉鍣�
+		ComprehensiveFileValidator.UploadValidationResult validationResult = fileValidator.validateFile(file);
+		if (!validationResult.isValid()) {
+			return R.fail(validationResult.getMessage());
+		}
+
 		CodeOrderDTO orderDTO = new CodeOrderDTO();
 		orderDTO.setCodeClassifyOid(codeClassifyOid);
 		if(StringUtils.isNotBlank(secDTOList)){
@@ -272,6 +292,12 @@
 	@VciBusinessLog(operateName = "瀵煎叆缂栫爜鐨勫巻鍙叉暟鎹�")
 	@PostMapping("/batchImportHistoryData")
 	public R batchImportHistoryData(String codeClassifyOid, String classifyAttr,MultipartFile file,HttpServletResponse response) throws Throwable {
+		// 浣跨敤鏂囦欢瀹夊叏楠岃瘉鍣�
+		ComprehensiveFileValidator.UploadValidationResult validationResult = fileValidator.validateFile(file);
+		if (!validationResult.isValid()) {
+			return R.fail(validationResult.getMessage());
+		}
+
 		String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + file.getOriginalFilename();
 		File file1 = new File(excelFileName);
 		try {
@@ -315,6 +341,12 @@
 	@VciBusinessLog(operateName = "鎵归噺鐢宠缂栫爜鐨勪俊鎭�")
 	@PostMapping("/batchTopImportCode")
 	public R batchTopImportCode(String codeClassifyOid, String classifyAttr,MultipartFile file,HttpServletResponse response) throws Throwable {
+		// 浣跨敤鏂囦欢瀹夊叏楠岃瘉鍣�
+		ComprehensiveFileValidator.UploadValidationResult result = fileValidator.validateFile(file);
+		if (!result.isValid()) {
+			return R.fail(result.getMessage());
+		}
+
 		String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + file.getOriginalFilename();
 		File file1 = new File(excelFileName);
 		try {
@@ -358,7 +390,7 @@
 	 * @param baseModelDTO 鏁版嵁浼犺緭瀵硅薄
 	 * @return 鎵ц缁撴灉
 	 */
-	@PostMapping("changeStatus")
+	@PostMapping("/changeStatus")
 	public R changeStatus(@RequestBody BaseModelDTO baseModelDTO) {
 		engineService.changeStatus(baseModelDTO);
 		return R.success("鎿嶄綔鎴愬姛锛�");
@@ -464,7 +496,7 @@
 		return engineService.gridTableDataByClassifyOid(codeClassifyOid,templateOid,queryObject.getConditionMap(),queryObject.getPageHelper());
 	}
 
-	/***
+	/**
 	 * 鑾峰彇鍒嗙被瀵硅薄
 	 * @param redisOid
 	 * @return
@@ -475,7 +507,7 @@
 		return R.data(codeImportTemplateVOs);
 	}
 
-	/***
+	/**
 	 * 浠巖edis缂撳瓨閲岃幏鍙栧埌瀵煎叆姝g‘鐨勬暟鎹�
 	 * @param codeClassifyOid
 	 * @param redisOid
@@ -486,7 +518,7 @@
 		return mdmIOService.gridDatas(codeClassifyOid,redisOid);
 	}
 
-	/***
+	/**
 	 * 浠巖edis缂撳瓨閲岃幏鍙栧埌瀵煎叆琛岀浉浼奸」鐨勬暟鎹�
 	 * @param dataOid
 	 * @param redisOid
@@ -497,7 +529,7 @@
 		return mdmIOService.gridRowResemble(dataOid,redisOid);
 	}
 
-	/***
+	/**
 	 * 浠巖edis缂撳瓨閲岃幏鍙栧埌瀵煎叆鍏锋湁鐩镐技椤圭殑鏁版嵁
 	 * @param codeClassifyOid
 	 * @param redisOid
@@ -508,7 +540,7 @@
 		return mdmIOService.gridDatas(codeClassifyOid,redisOid);
 	}
 
-	/***
+	/**
 	 * 瀵煎叆鏁版嵁
 	 * @param codeImprotSaveDatVO//鏁版嵁瀵硅薄
 	 * @return
@@ -518,7 +550,7 @@
 		return mdmIOService.batchImportData(codeImprotSaveDatVO.getCodeImprotSaveDatVOList(),codeImprotSaveDatVO.getClassifyAttr(),codeImprotSaveDatVO.getImprot());
 	}
 
-	/***
+	/**
 	 * 鏍规嵁鏁版嵁oid浠庣紦瀛樹腑绉婚櫎鏁版嵁
 	 * @param redisOid redisid
 	 * @param codeClassifyOid 瀛樺偍瑙勫垯鐨刼id
@@ -673,7 +705,7 @@
 	 * @param idPath 缂栧彿鐨勮矾寰�
 	 * @return UI鐩稿叧鐨勪俊鎭紙浠呭寘鍚〃鍗�)
 	 */
-//	@VciUnCheckRight
+	//	@VciUnCheckRight
 	@GetMapping("/getFormDefineByClassifyIdPath")
 	public MdmUIInfoVO getFormDefineByClassifyIdPath(String idPath){
 		return engineService.getFormDefineByClassifyIdPath(idPath);
@@ -728,7 +760,7 @@
 	 * @return UI鐩稿叧鐨勪俊鎭紙浠呭寘鍚〃鏍硷級
 	 */
 	@GetMapping("/getFlowdUIInfoByClassifyOid")
-	public MdmUIInfoVO getUIInfoByClassifyOid(String codeClassifyOid,String functionId,String templateId,String taskId,String modelKey){
+	public MdmUIInfoVO getFlowUIInfoByClassifyOid(String codeClassifyOid,String functionId,String templateId,String taskId,String modelKey){
 		return engineService.getFlowUIInfoByClassifyOid(codeClassifyOid,functionId,templateId,taskId,modelKey);
 	}
 
@@ -861,7 +893,7 @@
 	//	return R.status(true);
 	}
 
-	/***
+	/**
 	 * 闆嗗洟鐮佸鍏�
 	 * @param codeClassifyOid
 	 * @param file
@@ -870,6 +902,11 @@
 	 */
 	@PostMapping("/importGroupCode")
 	public R  importGroupCode(String codeClassifyOid,MultipartFile file,HttpServletResponse response){
+		// 浣跨敤鏂囦欢瀹夊叏楠岃瘉鍣�
+		ComprehensiveFileValidator.UploadValidationResult result = fileValidator.validateFile(file);
+		if (!result.isValid()) {
+			return R.fail(result.getMessage());
+		}
 
 		String excelFileName = LocalFileUtil.getDefaultTempFolder() + File.separator + file.getOriginalFilename();
 		File file1 = new File(excelFileName);

--
Gitblit v1.9.3