diff --git a/laws-base/laws-base-core/src/main/java/com/jero/common/util/IntekeyUtils.java b/laws-base/laws-base-core/src/main/java/com/jero/common/util/IntekeyUtils.java index e3dba606..06957b7f 100644 --- a/laws-base/laws-base-core/src/main/java/com/jero/common/util/IntekeyUtils.java +++ b/laws-base/laws-base-core/src/main/java/com/jero/common/util/IntekeyUtils.java @@ -29,6 +29,10 @@ public class IntekeyUtils { public static String DECRYPT_URL; public static String DECRYPT_APP_CODE; public static String DECRYPT_SECRET_KEY; + public static Integer SCOPE_DEV; + public static String ENCRYPT_URL; + public static String ENCRYPT_APP_CODE; + public static String ENCRYPT_SECRET_KEY; @Value("${download.enable}") public void setEnable(boolean enable) { @@ -50,6 +54,23 @@ public class IntekeyUtils { DECRYPT_SECRET_KEY = decryptSecretKey; } + @Value("${download.scope_dev}") + public void setScopeDev(Integer scopeDev) { + SCOPE_DEV = scopeDev; + } + @Value("#{'${download.encrypt.url}'}") + public void setEncryptUrl(String encryptUrl) { + ENCRYPT_URL = encryptUrl; + } + @Value("#{'${download.encrypt.app_code}'}") + public void setEncryptAppCode(String encryptAppCode) { + ENCRYPT_APP_CODE = encryptAppCode; + } + @Value("#{'${download.encrypt.secret_key}'}") + public void setEncryptSecretKey(String encryptSecretKey) { + ENCRYPT_SECRET_KEY = encryptSecretKey; + } + public static MultipartFile autoDecryptFile(MultipartFile file) { if (!ENABLE || file == null) { return file; @@ -84,6 +105,11 @@ public class IntekeyUtils { } } + public static InputStream autoEncryptInputStreamFile(InputStream is, String fileName) throws IOException { + MultipartFile file = IntekeyUtils.convertMultipart(is, fileName); + return IntekeyUtils.decryptFile(ENCRYPT_URL, ENCRYPT_APP_CODE, ENCRYPT_SECRET_KEY, SCOPE_DEV, file); + } + public static MultipartFile convertMultipart(InputStream is, String fileName) throws IOException { // 假定文件名和内容类型已知 String contentType = "application/octet-stream"; // 或其他类型 diff --git a/laws-module-system/src/main/java/com/jero/modules/system/util/SysWaterMarkUtil.java b/laws-module-system/src/main/java/com/jero/modules/system/util/SysWaterMarkUtil.java index f5f4c285..017137f1 100644 --- a/laws-module-system/src/main/java/com/jero/modules/system/util/SysWaterMarkUtil.java +++ b/laws-module-system/src/main/java/com/jero/modules/system/util/SysWaterMarkUtil.java @@ -2,6 +2,8 @@ package com.jero.modules.system.util; import com.jero.common.system.vo.LoginUser; import com.jero.common.util.DateUtils; +import com.jero.common.util.IntekeyUtils; +import lombok.extern.slf4j.Slf4j; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; @@ -13,14 +15,10 @@ import org.apache.pdfbox.util.Matrix; import org.springframework.beans.factory.annotation.Value; import org.springframework.core.io.ClassPathResource; import org.springframework.stereotype.Component; - +import java.io.*; import java.util.ArrayList; import java.util.List; import java.awt.*; -import java.io.ByteArrayInputStream; -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.Date; @@ -30,6 +28,7 @@ import java.util.Date; * @author CaiHaohan */ @Component +@Slf4j public class SysWaterMarkUtil { @Value("${watermark.font-size}") @@ -63,6 +62,8 @@ public class SysWaterMarkUtil { @Value("${watermark.margin.top}") private float marginTop; + @Value("#{'${download.enable}'}") + private boolean enable; public List getWaterMarkConfig() { LoginUser loginUser = UserUtils.getLoginUser(); @@ -79,6 +80,9 @@ public class SysWaterMarkUtil { public synchronized InputStream addWatermarkToPdf(InputStream inputStream) throws IOException { List watermarkText = getWaterMarkConfig(); + if (enable) { + inputStream = IntekeyUtils.autoDecryptInputStreamFile(inputStream, "test.pdf"); + } PDDocument document = PDDocument.load(inputStream); document.setAllSecurityToBeRemoved(true); // 加载水印字体 diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/ILawsCommonService.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/ILawsCommonService.java index 5ac9093a..929a2020 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/ILawsCommonService.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/ILawsCommonService.java @@ -182,6 +182,14 @@ public interface ILawsCommonService { */ byte[] getMinioFileContent(OSSFile file) throws Exception; + /** + * 获取文件内容(企标专用 特殊处理了加解密) + * @param file + * @return + * @throws Exception + */ + byte[] getMinioFileContentES(OSSFile file) throws Exception; + /** * 企标的模板下载是压缩包,里面有两个Excel模板 * @param response diff --git a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java index 3cb27573..6c897081 100644 --- a/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java +++ b/laws-modules/src/main/java/com/jero/modules/laws/common/service/impl/LawsCommonServiceImpl.java @@ -223,6 +223,9 @@ public class LawsCommonServiceImpl implements ILawsCommonService { @Value("#{'${enterpriseDetailRoleCode}'.split(',')}") private List enterpriseDetailRoleCodeList; + @Value("#{'${download.enable}'}") + private boolean enable; + /** * @Author: liao * @Date: 2023/8/23 16:57 @@ -1613,7 +1616,11 @@ public class LawsCommonServiceImpl implements ILawsCommonService { ZipEntry fileEntry = new ZipEntry(file.getFileRelativePath()); zipOut.putNextEntry(fileEntry); // 将文件取出存入流中 - bytes = this.getMinioFileContent(file); + if(TableNameEnum.ENTERPRISE_STANDARDS.getValue().equals(parameterMap.get(FieldCommon.MODULE))) { + bytes = this.getMinioFileContentES(file); + } else { + bytes = this.getMinioFileContent(file); + } zipOut.write(bytes, 0, bytes.length); zipOut.closeEntry(); } @@ -2558,6 +2565,10 @@ public class LawsCommonServiceImpl implements ILawsCommonService { @Override public byte[] getMinioFileContent(OSSFile file) throws Exception { + return this.getMinioFileContentNormal(file, false); + } + + private byte[] getMinioFileContentNormal(OSSFile file, boolean esSpecial) throws Exception { String fileUrl = file.getUrl(); String fileName = file.getFileName(); String minioUrl = MinioUtil.getMinioUrl(); @@ -2568,14 +2579,21 @@ public class LawsCommonServiceImpl implements ILawsCommonService { byte[] buf = new byte[1024]; int len; if ("pdf".equalsIgnoreCase(FileUtil.extName(fileName))) { + // 如果是PDF文件, 添加水印 try (InputStream originalInputStream = MinioUtil.getMinioFile(MinioUtil.getBucketName(), url); InputStream watermarkedInputStream = sysWaterMarkUtil.addWatermarkToPdf(originalInputStream)) { + // 如果是系统开启了加密并且处理的是企标 则需要将加水印的pdf文件再次加密 + InputStream is = watermarkedInputStream; + if (esSpecial && enable) { + // 加密企标的PDF + is = IntekeyUtils.autoEncryptInputStreamFile(is, fileName); + } if (originalInputStream == null) { return null; } - while ((len = watermarkedInputStream.read(buf)) > 0) { + while ((len = is.read(buf)) > 0) { outputStream.write(buf, 0, len); } } catch (Exception e) { @@ -2600,6 +2618,11 @@ public class LawsCommonServiceImpl implements ILawsCommonService { } } + @Override + public byte[] getMinioFileContentES(OSSFile file) throws Exception { + return this.getMinioFileContentNormal(file, true); + } + @Override public void esTemplateDownload(HttpServletResponse response) throws Exception { // 1. 生成企标的模板