我试图使用 Apache POI 将保护添加到 MS Excel 文件中,当我进行一些测试时它工作正常,但是当我在 Weblogic Server 12 运行时证明该功能时它失败了。这是我的代码:public static void parseFileToSecureFile(String fullFileName, String password) throws MyException{ POIFSFileSystem fs = new POIFSFileSystem(); EncryptionInfo info = new EncryptionInfo(EncryptionMode.agile, CipherAlgorithm.aes256, HashAlgorithm.sha512, -1, -1, null); Encryptor enc = info.getEncryptor(); enc.confirmPassword(password); OPCPackage opc = null; OutputStream os = null; FileOutputStream fos = null; try { opc = OPCPackage.open(new File(fullFileName), PackageAccess.READ_WRITE); os = enc.getDataStream(fs); opc.save(os); fos = new FileOutputStream(fullFileName); fs.writeFilesystem(fos); } catch (Exception e) { logger.error("error: "+e.getMessage(), e); throw new MyException("An Error"); }finally { fs.close(); fos.close(); }}public static void main(String[] args){ System.out.println("Inicia"); try { parseFileToSecureFile("/my_path/my_file.xlsx", "11"); } catch (MyException e) { e.printStackTrace(); } System.out.println("Finaliza");}正如我告诉你的,如果我从我的“主要方法”运行我的代码“原样”它可以工作,但如果我在运行时从 Web 应用程序调用该方法,我有下一个异常:org.apache.poi.EncryptedDocumentException: java.lang.ClassCastException: org.apache.poi.poifs.crypt.agile.AgileEncryptionInfoBuilder cannot be cast to org.apache.poi.poifs.crypt.EncryptionInfoBuilder at org.apache.poi.poifs.crypt.EncryptionInfo.<init>(EncryptionInfo.java:186) at org.apache.poi.poifs.crypt.EncryptionInfo.<init>(EncryptionInfo.java:153) at com.tets.test.test.FileCipher.parserFileToSecureFile(FileCipher.java:39) at com.test.test.test.backing.MyAdmin.doSomething(Something.java:387) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
1 回答
呼唤远方
TA贡献1856条经验 获得超11个赞
如果其他人有同样的问题,这是我必须做的改变:
将我的 POI 版本从 v3.15 更新到 v4.0.1
添加commons-compress v1.18
此外,如果您必须阅读加密文件,您将需要:
xmlbeans-3.0.2
公共集合4-4.1
Weblogic Server 有他自己的 xmlbeans 版本,你会遇到依赖冲突,所以,你需要在你的 weblogic.xml 文件中添加容器描述符标签中的下一个标签:
<prefer-web-inf-classes>false</prefer-web-inf-classes>
您还需要将下一个标签添加到 weblogic-application.xml 文件中:
<prefer-application-packages> <package-name>org.apache.xmlbeans.*</package-name> <package-name>repackage.*</package-name> <package-name>schemaorg_apache_xmlbeans.system.*</package-name> </prefer-application-packages>
添加回答
举报
0/150
提交
取消