我们从附加的 JNLP 运行该应用程序。在 Java 控制台上,我们已使用 D 输出系统属性。JNLP 文件中的属性不再设置。这是我们遇到此类问题的第一个 Java 版本。在 7 Update 40 之前一切都运行良好。
我们已对所有 jar 进行签名,但其清单中没有安全属性。
<?xml version="1.0" encoding="UTF-8"?>
<jnlp spec="1.0+" codebase="http://10.0.10.230/webstart/app" href="desktop.jnlp">
<information>
<title>MyApp Desktop</title>
<vendor>MyApp GmbH</vendor>
<homepage href="http://www.myres-edv.de"/>
<description>MyApp Desktop</description>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.5+" initial-heap-size="512M" max-heap-size="1024M" javaws-vm-args="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8200"/>
<property name="org.omg.CORBA.ORBInitialHost" value="10.0.10.230"/>
<property name="org.omg.CORBA.ORBServerHost" value="10.0.10.230" />
<property name="sun.net.spi.nameservice.provider.1" value="dns,sun" />
<property name="MyApp.baktswritedos" value="true"/>
<property name="MyApp.nocomm" value="true"/>
<property name="MyApp.la.erfassungdos" value="true"/>
<property name="com.sun.corba.ee.transport.ORBTCPConnectTimeouts" value="500:30000:40:30000" />
<property name="deployment.trace.level" value="all" />
<jar href="myresjar/ejb/myres/myres_ejb_client.jar" main="true" download="eager"/>
<jar href="myresjar/ejb/myres/myres_ejb.jar" download="eager"/>
<extension name="jars" href="commonejbjars.jnlp"/>
<extension name="jars" href="jr.jnlp"/>
<extension name="jars" href="commonjars.jnlp"/>
<extension name="jars" href="commonjh.jnlp"/>
<nativelib href="myresjar/ejb/myres/myres_dll.jar"/>
</resources>
<resources os="Windows">
<nativelib href="myresjar/myres/native-dlls.jar" download="eager"/>
</resources>
<application-desc main-class="de.myapp.gui.desktop.mainframe.DesktopMainFrame">
<argument>-serverIP=10.0.0.230</argument>
<argument>-initNewDayAction=true</argument>
</application-desc>
</jnlp>
我们在 Java 7 Update 45 (1.7.0_45) 中遇到了同样的问题。这JNLP规范 http://docs.oracle.com/javase/7/docs/technotes/guides/javaws/developersguide/syntax.html给出了解决方法的提示:
jnlp 文件中设置的属性通常由 Java Web Start 在 VM 启动之后、调用应用程序之前设置。某些属性被视为“安全”属性,可以在 java 调用命令行上作为 -Dkey=value 参数传递。
以下属性以及以“javaws”开头的属性。或“jnlp.”,被认为是“安全的”,并将通过以下方式传递到虚拟机:
...
虽然“不安全”属性停止工作,但我们意识到“安全”属性仍然可以正确设置。
也许在虚拟机启动后但在调用应用程序之前设置属性的机制因这次 Java 更新而被破坏,或者这可能是有意但未记录的更改。
现在的解决方法取决于系统属性的类型:
对于影响 Java 行为或库的系统属性,我们将代码更改为调用系统.setProperty()在应用程序启动时而不是在 JNLP 中设置它们。
对于我们用来从 JNLP 文件配置应用程序的属性,我们添加了jnlp.前缀,以便它们再次正确传递。
<property name="myconfig" value="DE" />
to
<property name="jnlp.myconfig" value="DE" />
Edit:根据OpenJDK 错误 JDK-8023821 https://bugs.openjdk.java.net/browse/JDK-8023821,更改是有意的:
从 7u45 开始,启动描述符(JNLP 文件)需要签名才能设置不安全的系统属性。所以这是 7u45 中的预期行为......
(来自评论)
签署 JNLP 的说明 http://docs.oracle.com/javase/7/docs/technotes/guides/jweb/security/signedJNLP.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)