使用 Java 7 Update 45,不再从 JNLP 标记“属性"设置系统属性. [英] With Java 7 Update 45, the System Properties no Longer Set from JNLP Tag "Property"

查看:35
本文介绍了使用 Java 7 Update 45,不再从 JNLP 标记“属性"设置系统属性.的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我们从附加的 JNLP 运行应用程序.在 Java 控制台上,我们使用 D 输出系统属性.不再设置 JNLP 文件中的属性.这是我们遇到此类问题的第一个 Java 版本.在 7 次更新 40 之前,一切都运行良好.

We run the application from the attached JNLP. On the Java console, we have output the system properties with D. The properties from our JNLP files are not set any more. This is the first Java version that we get this sort of problems with. Everything was working fine up to and including 7 Update 40.

我们已对所有 jar 进行签名,但它们的清单中没有安全属性.

We have all the jars signed but there are no security attributes in their manifests.

<?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 规范提示了解决方法:

We experienced the same Problem with Java 7 Update 45 (1.7.0_45). The JNLP Spec gave a hint for a work-around:

jnlp 文件中设置的属性通常会在 VM 启动之后但在调用应用程序之前由 Java Web Start 设置.某些属性被视为安全"属性,可以在 java 调用命令行上作为 -Dkey=value 参数传递.

Properties set in the jnlp file will normally be set by Java Web Start after the VM is started but before the application is invoked. Some properties are considered "secure" properties and can be passed as -Dkey=value arguments on the java invocation command line.

以下属性,以及以javaws"开头的属性.或jnlp.",被认为是安全的",并将以这种方式传递给 VM:...

The following properties, as well as properties beginning with either "javaws." or "jnlp.", are considered "secure" and will be passed to the VM in this way: ...

虽然不安全"属性停止工作,但我们意识到安全"属性仍然可以正确设置.也许在 VM 启动之后但在应用程序被调用之前设置属性的机制被 Java 更新破坏了,或者这是一个有意但未记录的更改.

While "insecure" properties stopped working, we realized that "secure" properties would still be set correctly. Maybe the mechanism that sets properties after the VM is started but before the application is invoked, got broken with this Java update, or maybe this was an intentional but undocumented change.

解决方法现在取决于系统属性的类型:

The work-around now depends on the type of system properties:

对于影响 Java 行为或库的系统属性,我们将代码更改为在应用程序启动时调用 System.setProperty(),而不是在 JNLP 中设置它们.

For system properties that affect Java behavior or libraries, we changed our code to call System.setProperty() at the application start instead of setting them in the JNLP.

对于我们用来从 JNLP 文件配置应用程序的属性,我们添加了 jnlp. 前缀,以便它们再次正确传递.

For properties that we use to configure the application from the JNLP file, we added the jnlp. prefix so that they are passed correctly again.

<property name="myconfig" value="DE" />

<property name="jnlp.myconfig" value="DE" />

根据OpenJDK Bug JDK-8023821,更改是有意的:

从 7u45 开始,启动描述符(JNLP 文件)需要签名才能设置不安全的系统属性.所以这是 7u45 中的预期行为......(来自评论)

Starting from 7u45 launch descriptor (JNLP file) need to be signed in order to set insecure system properties. So it is expected behaviour in 7u45... (from a comment)

签署 JNLP 的说明.

这篇关于使用 Java 7 Update 45,不再从 JNLP 标记“属性"设置系统属性.的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆