我的webapp允許用戶上傳jar文件。但是,在jar文件上傳後,它已損壞。我通過比較md5校驗和(winmd5free)驗證了這一點。如何檢查jar文件是否有效?
上傳的jar文件看起來「正常」和「右」
- 文件大小比原來的期待權(在KB級)
- 我可以用7z格式打開上傳的jar文件,查看其內容(資源類文件),一切都是比較原始
當我打開(用記事本+ +),我也注意到,二進制內容從原來的不同上傳的jar文件相同。另外,當我使用JarInputStream讀取jar條目時,沒有條目。此外,當我雙擊jar(Windows)時,我收到以下消息。
Error: Invalid or corrupt jarfile
我的問題是
- 有沒有辦法以編程方式檢查jar文件是否有效?我會期望JarInputStream檢測到這一點,但它沒有顯示任何問題
- 當我雙擊jar文件,在Windows中,它是java.exe是給我無效或損壞的jarfile消息?
- 當一個無效的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)
在命令行上,像這樣運行jar命令:'jar -tvf'。 't'表示「測試」,'v'我認爲意思是「詳細」,而'f'表示「文件」。您也可以在任何ZIP程序中打開JAR。 –
CodeChimp
謝謝,我將使用java.util.zip.ZipFile來查看是否可以通過編程方式檢查(請參閱使用jar工具運行這些選項來修改堆棧跟蹤的添加)。 –
@CodeChimp't'是你可以在https://docs.oracle.com/javase/tutorial/deployment/jar/view.html看到的「列出JAR文件的內容」,因此它不會測試內容的校驗和(儘管它需要是一個更有效的jar來列出條目)。 – PhoneixS