Java 7更新45破坏了我的Web Start SWT应用程序

我维护了一个使用WebStart启动的Eclipse RCP应用程序。 Java 7 u45进行了一些安全性更改,现在我的应用程序在启动时崩溃了。

我已添加到清单中:

权限:所有权限

代码库:*

Trusted-Library:是的

这删除了控制面板中的所有警告消息。 但是在尝试加载我的IApplication实现时,我仍然有一个类加载器问题,可能是我要加载的第一个类。 这是更新45的新function。

我遇到了同样的问题,并通过以下方式设法解决了这个问题:

在所有清单文件中(对于RCP项目中的每个JAR)添加以下属性:

Application-Name: My App Name Permissions: all-permissions Codebase: * Application-Library-Allowable-Codebase: * Caller-Allowable-Codebase: * Trusted-Library: true 

解决方案的第二部分是通过添加jnlp前缀使jnlp属性安全 。 我在这里找到了解决方案。 您需要为框架属性 (osgi,eclipse ..) 和您的属性 执行此操作,而不是:

     

使用

     

从这里下载带有源的eclipse启动器

在Web启动启动器中,您需要将属性名称更改为旧值 (不带jnlp前缀)。 您可以通过将此部分源添加到WebStartLauncher类的main方法中来实现。

 Properties properties = System.getProperties(); // copy properties to avoid ConcurrentModificationException Properties copiedProperties = new Properties(); copiedProperties.putAll(properties); Set keys = copiedProperties.keySet(); for (Object key : keys) { if (key instanceof String) { String keyString = (String) key; if (keyString.startsWith("jnlp.")) { // re set all properties starting with the jnlp-prefix // and set them without the prefix String property = System.getProperty(keyString); String replacedKeyString = keyString.replaceFirst("jnlp.", ""); System.setProperty(replacedKeyString, property); } } } 

将新的启动程序导出为可运行的JAR ,并将其放在JNLP文件所在的同一目录中。

通过添加以下行来编辑JNLP文件

  

在标签内部编辑你的application-desc标签,如下所示:

   

当7u25出来时,我的应用程序会因类加载器问题而崩溃(有时,它很奇怪)。 该修复程序涉及修复我的“Components.jnlp”部署策略。 我把我的库文件放在一个单独的.jnlp(Components.jnlp,根据我在2010年在线阅读的解决方案),我的主.jnlp(launch.jnlp)将加载.jnlp。

现在,似乎Netbeans生成的.jnlp就足够了,我不再需要任何单独的.jnlp用于库组件。 我不确定eclipse是否会为您提供自动生成的.jnlp。

最后,更改launch.jnlp涉及到我必须为我的客户端提供一个新的安装程序,将新的.jnlp加载到他们的计算机上。 它很糟糕但很有效。

另外,我不确定Codebase: *应该做什么。 你为什么不把你的实际代码库放在那里?

如果您没有使用该方法部署您的应用程序,那么这个答案可能无济于事。 可能会帮助别人。

到目前为止,我们已经拥有多个JNLP文件,它似乎有效。

我们在客户内部网络上安装我们的应用程序,因此我们无法设置除*之外的代码库,而无需为每个客户重新设置整套jar。