use*_*888 25 java jnlp properties system java-web-start
我们从附加的JNLP运行应用程序.在Java控制台上,我们使用D输出系统属性.我们的JNLP文件中的属性不再设置.这是我们遇到此类问题的第一个Java版本.一切都工作正常,包括7 Update 40.
我们已经签署了所有的罐子,但是它们的清单中没有安全属性.
<?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>
Run Code Online (Sandbox Code Playgroud)
Mic*_*old 32
我们遇到了与Java 7 Update 45(1.7.0_45)相同的问题.该JNLP规格给了一个变通的提示:
在启动VM之后但在调用应用程序之前,jnlp文件中设置的属性通常由Java Web Start设置.某些属性被视为"安全"属性,可以在java调用命令行上作为-Dkey = value参数传递.
以下属性,以及以"javaws"开头的属性.或"jnlp.",被认为是"安全的",并将以这种方式传递给VM:...
虽然"不安全"属性停止工作,但我们意识到仍然可以正确设置"安全"属性.也许在VM启动之后但在调用应用程序之前设置属性的机制已经破坏了这个Java更新,或者这可能是一个有意但没有文档的更改.
解决方法现在取决于系统属性的类型:
对于影响Java行为或库的系统属性,我们将代码更改为在应用程序启动时调用System.setProperty(),而不是在JNLP中设置它们.
对于我们用于从JNLP文件配置应用程序的属性,我们添加了jnlp.前缀,以便它们再次正确传递.
<property name="myconfig" value="DE" />
Run Code Online (Sandbox Code Playgroud)
至
<property name="jnlp.myconfig" value="DE" />
Run Code Online (Sandbox Code Playgroud)
编辑:根据OpenJDK Bug JDK-8023821,改变是故意的:
从7u45开始描述符(JNLP文件)开始需要签名才能设置不安全的系统属性.所以它是7u45的预期行为......(来自评论)
小智 2
遇到了同样的问题,通过签署 jnlp 文件解决了它。您的主 jar 应包含 jnlp 文件的副本,重命名为 APPLICATION.JNLP 并放置在 JNLP-INF 文件夹下。(文件夹和 jnlp 文件的名称必须大写)
| 归档时间: |
|
| 查看次数: |
31857 次 |
| 最近记录: |