如何检查 JAR 文件是否有效?
2022-09-03 07:42:12
我的 webapp 允许用户上传 JAR 文件。但是,在上传 jar 文件后,该文件已损坏。我已经通过比较上传文件之前和之后的MD5校验和(winmd5free)来验证这一点。
上传的 jar 文件与原始文件几乎完全相同:
- 与原始文件相比,文件大小相似(在KB级别)
- 我可以使用解压缩程序打开上传的jar文件并查看其内容(资源和类文件),与原始文件相比,一切都是相同的
当我打开上传的jar文件(使用Notepad ++)时,我确实注意到二进制内容与原始内容不同。另外,当我过去阅读JAR条目时,没有条目。JarInputStream
JarInputStream is = new JarInputStream(new FileInputStream(new File("uploaded.jar")));
JarEntry entry = null;
while(null != (entry = is.getNextJarEntry())) {
System.out.println(entry.getName());
}
此外,当我双击jar(Windows)时,我会收到以下消息。
错误:无效或损坏的 jar 文件
我的问题是:
- 有没有办法以编程方式检查jar文件是否有效?我本来希望立即检测到这一点,但它根本没有显示任何问题
JarInputStream
- 当我在窗口中双击jar文件时,java.exe是否给了我“无效或损坏的JAR文件”消息?
- 为什么当一个无效的jar文件作为类路径的一部分传入时,不会引发错误/异常?例如,通过运行命令?
java -cp uploaded.jar;libs\* com.some.class.Test
这个问题与 jar 签名和/或检查 JAR 文件的签名无关。它只是检查一个文件(上传或未上传)是否是有效的JAR文件(不一定是jar的类文件是否有效,因为已经有另一个关于这个问题的SO帖子)。
我的跑步结果 :jar -tvf uploaded.jar
java.util.zip.ZipException: error in opening zip file
at java.util.zip.ZipFile.open(Native Method)
at java.util.zip.ZipFile.<init>(ZipFile.java:127)
at java.util.zip.ZipFile.<init>(ZipFile.java:88)
at sun.tools.jar.Main.list(Main.java:977)
at sun.tools.jar.Main.run(Main.java:222)
at sun.tools.jar.Main.main(Main.java:1147)