【发布时间】:2016-02-23 09:22:19
【问题描述】:
我们正在使用 Java web start 来部署我们的应用程序。 所有 JAR 文件都经过签名,在所有 Java 版本(包括 8u73)上部署和使用应用程序都没有问题。
使用 JRE 8u74,应用程序部署正常(所有 JAR 文件已下载并且应用程序正确启动)。 尝试从 JAR 文件中提取文件时,我们收到以下消息:
Failed to validate certificate. The application will not be executed.
java.security.cert.CertificateException: Could not verify signing in resource: https://www.example.com:443/app/myFile.jar
at com.sun.deploy.security.TrustDecider.ensureAllJarEntriesSigned(Unknown Source)
at com.sun.deploy.security.TrustDecider.getValidationState(Unknown Source)
at com.sun.deploy.security.TrustDecider.validateChain(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGrantedInt(Unknown Source)
at com.sun.deploy.security.TrustDecider.isAllPermissionGranted(Unknown Source)
at com.sun.deploy.security.DeployURLClassLoader.getResourcePermission(Unknown Source)
at com.sun.deploy.security.DeployURLClassLoader.getResourceAsStream(Unknown Source)
at com.til.manager.B.A.A(Unknown Source)
at com.til.manager.B.A.D(Unknown Source)
at com.til.manager.B.A.B(Unknown Source)
at com.til.manager.app.H$6.run(Unknown Source)
Caused by: com.sun.deploy.net.JARSigningException: Could not verify signing in resource: https://www.example.com:443/app/myFile.jar
这发生在几个文件中。 当我们的应用程序尝试从 JAR 文件中提取文件到本地计算机时,会显示此错误消息。
进一步调查我们发现,在 8u74 上,对于以下代码:
ClassLoader classLoader = this.getClass().getClassLoader();
classLoader.getResource("").getPath();
第二行返回NULL。
在所有以前的 Java 版本上,这都能正常工作。
这是否与错误消息有关?
知道为什么会发生这种情况或如何解决这个问题吗?
【问题讨论】:
-
你认为
classLoader.getResource("")应该返回什么?您在与class相同的文件夹中是否有一个名为EMPTY_STRING的资源?否则,返回null是the documentation 中指定的行为。 -
“正常工作”是什么意思?
classLoader.getResource("")的结果是怎么定义的? -
我想知道OP是否将
classLoader.getResource("")的行为与new File("")混淆了。 -
@Tom 有一个
URLClassLoader的 UB,确实返回文件夹上getResource的路径。我认为 OP 在某些逻辑上依赖它...
标签: java java-web-start