diff --git a/server/src/main/java/cn/keking/utils/OfficeUtils.java b/server/src/main/java/cn/keking/utils/OfficeUtils.java index 0131178d..fd05fe03 100644 --- a/server/src/main/java/cn/keking/utils/OfficeUtils.java +++ b/server/src/main/java/cn/keking/utils/OfficeUtils.java @@ -1,6 +1,7 @@ package cn.keking.utils; import org.apache.commons.lang3.exception.ExceptionUtils; +import org.apache.poi.EncryptedDocumentException; import org.apache.poi.extractor.ExtractorFactory; import org.apache.poi.hssf.record.crypto.Biff8EncryptionKey; import org.springframework.lang.Nullable; @@ -17,7 +18,7 @@ import java.nio.file.Paths; */ public class OfficeUtils { - private static final String POI_INVALID_PASSWORD_MSG = "Invalid password specified"; + private static final String POI_INVALID_PASSWORD_MSG = "password"; /** * 判断office(word,excel,ppt)文件是否受密码保护 @@ -28,15 +29,17 @@ public class OfficeUtils { public static boolean isPwdProtected(String path) { try { ExtractorFactory.createExtractor(Files.newInputStream(Paths.get(path))); - } catch (IOException e) { - if (POI_INVALID_PASSWORD_MSG.equals(e.getMessage())) { + } catch (IOException | EncryptedDocumentException e) { + if (e.getMessage().toLowerCase().contains(POI_INVALID_PASSWORD_MSG)) { return true; } } catch (Exception e) { Throwable[] throwableArray = ExceptionUtils.getThrowables(e); for (Throwable throwable : throwableArray) { - if (throwable instanceof IOException && POI_INVALID_PASSWORD_MSG.equals(throwable.getMessage())) { - return true; + if (throwable instanceof IOException || throwable instanceof EncryptedDocumentException) { + if (e.getMessage().toLowerCase().contains(POI_INVALID_PASSWORD_MSG)) { + return true; + } } } }