在 Java 7 Update 45 中,不再通过 JNLP 标签“属性”设置系统属性

2024-03-31

我们从附加的 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(使用前将#替换为@)

在 Java 7 Update 45 中,不再通过 JNLP 标签“属性”设置系统属性 的相关文章

  • 如何从 TextInputLayout 中删除底部填充

    第一张图就是我想要的 第二张图是我实现的 正如您所看到的 TextInputLayout 的底部有一个填充 这使得灰色背景溢出超过 edittext 行 请不要建议负边距或填充 因为它在较新的 API 中不起作用 这是我为第一个文本输入布局
  • Spring JUnit 测试未加载完整的应用程序上下文

    您好 我正在尝试使用 spring junit 测试用例 并且我需要加载完整的应用程序上下文 然而 junit 测试不会初始化完整的应用程序上下文 测试类 RunWith SpringJUnit4ClassRunner class Spri
  • Java,检查字符串是否为回文。不区分大小写

    我想编写一个java方法 如果字符串是回文 则返回true 这是我到目前为止所拥有的 String palindrome boolean isPalindrome palindrome equals new StringBuilder pa
  • 如何使用 JRuby 创建 Java 小程序?

    我想使用 JRuby 创建一个 Java 小程序 也就是说 我想创建一个 Java 小程序 其中包含由 JRuby 运行的 Ruby 代码来完成所有 GUI 操作 我正在寻找一个简单的示例来说明如何开始 查看这些链接 来自我们代码库的 JR
  • 在java中将对象声明为final

    有人可以澄清以下代码的意义吗 class A int i 10 public void setI int b i b public int getI return i class Test public static void main S
  • flink - 使用匕首注入 - 不可序列化?

    我使用 Flink 最新通过 git 从 kafka 流式传输到 cassandra 为了简化单元测试 我通过 Dagger 添加依赖注入 ObjectGraph 似乎已正确设置自身 但 内部对象 被 Flink 标记为 不可序列化 如果我
  • 将 Java 8 Lambda 函数转换为 Java 7

    嘿 我是编码新手 我已经掌握了 Java 8 的 Lambda 函数 但我正在尝试将我为学校项目编写的一些代码转换为 Java 7 但我无法理解关于如何使这段代码在功能上相同 但在 java 7 中 很抱歉 如果这是一个愚蠢的问题 但我似乎
  • 在 LibGDX 中保存和检索图像文件

    如何在 LibGDX 中保存和检索图像文件 我想将图像文件保存在 AndroidApplication 类的本地存储中 并在我的 Core 项目中检索它 Libgdx 中的文件处理在libGDX 维基 https github com li
  • 桌面 webkit 相当于 Android 的 addJavascriptInterface()?

    在研究 Android UI 可能性时 我发现了一种名为 addJavascriptInterface 的方法的文档 该方法允许您将 Android Java 对象上的方法公开给 UI 的 WebView 组件中的 Javascript 这
  • java有跳过列表实现吗

    I find ConcurrentSkipListSet http download oracle com javase 6 docs api java util concurrent ConcurrentSkipListSet html在
  • JAVA - 路径问题(在 Eclipse 中有效,在 cmd 中无效)

    为什么下面的启动在 Eclipse 中有效 private static MaxentTagger maxentTagger new MaxentTagger c DP lemma models english left3words dis
  • Java Web 启动和安全性

    刚刚有人向我指出 我的博客中的 Java Web Start 应用程序 例如我的按键绑定 http tips4java wordpress com 2008 10 10 key bindings 条目 由于以下安全错误而不再起作用 经过一些
  • 并发 log4j

    我有自己的日志引擎 它将日志写入带有阻塞队列的单独线程上 为了使用 标准软件 我正在考虑切换到 log4j 我不希望我的高并发软件因日志命令而变慢 这些日志命令在调用命令时将所有内容写入磁盘 log4j 可以用作垃圾箱吗 Log4j 是大多
  • 在Android应用程序中导入Java项目?

    即使 Java 项目中的某些类在普通 Android 项目中无法识别 我是否可以在 Android 项目中使用 Java 项目 例如javax xml包 我认为有两种可能性 使用该 java 项目创建一个 jar 并将其导入到 androi
  • 无法实例化类:org.jnp.interfaces.NamingContextFactory

    这是我的代码 扬声器远程 java package test import javax ejb Remote Remote public interface SpeakerRemote String sayAPhrase String ph
  • 如何使用Netbeans的不确定进度条样式?

    我正在使用 Nimbus 外观和感觉编写 Java 应用程序 不幸的是 Nimbus 外观和感觉的不确定 JProgressBars 的外观是AWFUL 见下文 另一方面 我注意到 Netbeans 与 Nimbus 的外观和感觉有不同的不
  • JDA Events 更新版本后停止工作 [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我有一个使用最新版本的 JDA 4 2 0 168 用 Ja va 开发的不和谐机器人 我的机器人中有几个事件 但只有一
  • ClassCastException:ApiVersionImpl 无法转换为 java.lang.Integer

    我有 android gradle 项目 当我尝试启动应用程序时出现以下异常 ClassCastException com android build gradle internal model ApiVersionImpl cannot
  • 为什么我的 PlayFramework 应用程序出现很长的超时?

    我已经创建了一个工作应用程序 但有时当我更改内容并点击浏览器中的 重新加载 按钮时 该应用程序会永远超时 300000 毫秒或5分钟 之后我在浏览器中得到以下异常 java util concurrent TimeoutException
  • TextField“更改”事件仅在模糊时触发

    通常 Change 事件将在 TextField 失去焦点 模糊 后触发 但我需要它在字段值发生变化时立即触发 而不需要失去对该字段的关注 KeyListener 不会删除它 因为该值可能来自条形码扫描仪等 有什么办法可以做到这一点吗 提前

随机推荐