我们开始注意到了Java 7(特别是与更新4),我们所有的用户开始看到这与我们Webstart的应用程序:
[14:42:58,422] AWT-EventQueue-0(DEBUG) java.lang.SecurityException: class "CLASSNAME" does not match trust level of other classes in the same package
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.CPCallbackHandler$ChildElement.checkResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.DeployURLClassPath$JarLoader.checkResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.DeployURLClassPath$JarLoader.getResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.deploy.security.DeployURLClassPath.getResource(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.net.URLClassLoader$1.run(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.net.URLClassLoader$1.run(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.security.AccessController.doPrivileged(Native Method)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.net.URLClassLoader.findClass(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at com.sun.jnlp.JNLPClassLoader.findClass(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.lang.ClassLoader.loadClass(Unknown Source)
[14:42:58,422] AWT-EventQueue-0(DEBUG) at java.lang.ClassLoader.loadClass(Unknown Source)...More
凡CLASSNAME =几乎在任意点每一个类从应用程序执行的几罐,破几个行为。 如果我们的用户是使用Java 6,他们有没有问题! 仅7(更新4)。 我们签署所有我们的罐子,主应用程序JAR和它的图书馆罐子。 即用户推出我们在webstart应用中看到蓝色的盾牌,而不是黄色或红色。
这显然是一个问题,因为用户更频繁地现在升级到Java 7,我曾尝试或者通过使用以前安装的(作品),或安装一个新的,迫使我们的应用程序给用户的机器上使用Java 6 ....与J2SE版本=“1.6”,围绕资源的标签,但是这会导致它自己的问题,很可能是最好的,使之成为它自己的线程(自动JRE安装部分)。
甲骨文没有打破Webstart的安全与Java 7U4? 我该如何解决这个问题抛出:SecurityException?
就在jarsigners的原稿作者帮闲检查,我被其他开发人员直接在这里,我向他们原先分享黑客用。
根据他继续调查这一点,你需要将下面添加到呼叫到弓
callNoArgMethod("getSigningData", jar);
makeHardLink("signingDataRef", jar);
callNoArgMethod("getManifest", jar);
makeHardLink("manRef", jar, n);
清单电话是不是解决这个帖子的一部分。 当验收测试是为了摄制的问题,他们被发现。
在此基础上的新的信息,我们已经改变了我们的方法,我们现在使用反射来调用所有的“get”方法(以需要get方法最初填充softreferences的通话,如果它们尚未填充)
然后若有所思地发现在CachedJarFile类的所有softreferences并创建硬链接到他们。
这应该面向未来的进一步内部重命名/ refactors的解决方案,只要CachedJarFile停留在地方和黑客的基本前提保持真实。 (即:使softreferences到hardreferences。
我有同样的问题,07年1月7日:我在webstart应用与同时加载类相同的错误消息随机失败。 我发现这个页面有趣的解决方法Oracle论坛 。 最后的答案介绍了该问题的一种(Java 6中) - 该参考罐子的签名是持有软参考,并可以将这些垃圾回收,这将导致该错误消息。 这可以通过一些额外的线条采用了Java 7的
// Java 1.7
callNoArgMethod("getSigningData", jar);
makeHardLink("signingDataRef", jar);
我想你可能会遇到这个错误 。
该bug的状态说,修复已7U4交付。 但是,这并不与你说的话果冻。 也许“修复”休息....
在此期间,由“squaat”错误评论提到可能的解决方法。 例如,增加初始堆尺寸和/或使用一个预加载器,迫使一些JAR来早期加载。
我有同样的问题,更新到JRE 8更新91.以前的版本后1.6,1.7,1.8更新77我的应用程序运行正常。
有甲骨文重新是存在于JRE 1.6中的错误的错误 ?
唯一的解决办法我发现是禁用从Java控制面板混合代码控制。
我修好了它。 这个问题在我的应用程序所使用的库。 目前在罐子里的MANIFEST.MF是这样的:
Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.0
Created-By: 1.5.0_07-87 ("Apple Computer, Inc.")
Built-By: wolf
Name: common
Specification-Title: swixml
Specification-Vendor: swixml.org
Specification-Version: 1.6
Implementation-Title: org.swixml
Implementation-Vendor: swixml.org
Implementation-Version: 1.6 beta 1 (#151)
“名称”属性用于资源特定的条目,这里所说http://docs.oracle.com/javase/7/docs/technotes/guides/jar/jar.html#JAR_Manifest
签署这个罐子“名称”项被解释为一种资源,但没有资源签字。 当应用程序被启动的javaws发现阻止应用程序的罐子在MANIFEST.MF报道的资源和有效资源之间的不匹配
我一直在努力使用JRE 7U5相同的症状。 完全相同的网络应用开始,而无需使用JRE 6u33的问题。
在我的情况下,问题是由我的扩展JNLP文件中的一个引起的。 主JNLP文件中指定的所有权限的安全性,而扩展JNLP没有宣布任何特定的安全需求(只是一个空洞的安全标签)。
这导致在沙箱中加载的扩展罐子。 显然,Java 7的不接受与不同的安全要求混合罐,即使他们都签署。
这个问题是固定通过确保所有的扩展JNLP文件中指定的相同的安全性要求主JNLP文件。