java - 使用 Java 7 Update 45,不再从 JNLP 标记 "Property"设置系统属性

标签 java properties system java-web-start jnlp

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

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

<?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 Spec给出了解决方法的提示:

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.

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 更新而被破坏,或者这可能是有意但未记录的更改。

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

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

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

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

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

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

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)

Instructions for signing a JNLP .

关于java - 使用 Java 7 Update 45,不再从 JNLP 标记 "Property"设置系统属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19540761/

相关文章:

c++ - Visual Studio 2010 本地机器项目特定属性

c++ - 我可以控制鼠标属性,例如点击速度吗?

c# - 访问当前系统时区

java - 通过基准测试中的注释加载应用程序上下文

java - 是什么让不可变对象(immutable对象)在没有安全发布技术的情况下发布?

php - 如何使用变量访问动态属性?

security - WSO2 ESB 获取认证名称

java - 开始使用 Oracle 数据库

Java 和 SQLite 优化

perl - 如何将 Perl 的系统函数输出存储到变量中?