- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
由于tighter security restrictions在 7u51
,一月份到期,我正在尝试签署我的 JNLP 文件。
我们的应用程序需要设置某些自定义系统属性,并且其中一些属性的值根据小程序的部署位置而有所不同。我想避免必须为每次部署重新签署包含 JNLP 模板的 JAR。
放置 <property name="my-prop" value="*"/>
的天真方法在 JNLP 模板中不起作用。
即使是 <property name="my-prop" value="fixed-value"/>
在模板中,我有时会收到一个对话框,提示“此应用程序将执行不安全的操作。您要继续吗?”:
将系统属性传递到已签名的 Java RIA 的正确方法是什么?
最佳答案
在这两个方面,您的应用程序都需要添加一些要在启动时执行的简单代码,以解决这两个问题。
It is expected that a JNLP Client will blacklist (or restrict) certain jnlp elements and argument values such as "java-vm-args" or property "name" and "value" to maintain security. The exact list is up to the individual JNLP Client implementations.
事实上,Oracle 实现(至少在 7u45 中)确实将 value
列入黑名单。 <property/>
的属性元素——它不能被通配。我一直无法找到此决定背后的任何原因,但事实就是如此。
webstart 解决方法允许任意属性名称和值; applet 变通方法要求属性名称在代码签名时已知。
在您的 JNLP 文件中,包括一些通配符参数:
<application-desc main-class="com.example.YourMainClass">
<argument>*</argument>
<argument>*</argument>
</application-desc>
在您应用程序的 main
中方法,解析这些参数并使用 System.setProperty()
将它们复制到系统属性中, 跳过仍然具有字面值 "*"
的参数.我建议在第一次出现 "="
时简单地拆分每个参数. (如果您的应用程序也已经采用常规参数,则您必须更有创意。)
在您的 JNLP 文件中,包含定义需要设置的系统属性的参数:
<applet-desc main-class="com.example.YourMainClassApplet">
<param name="SYS_PROPERTY_PARAMETERS" value="prop1,prop2"/>
<param name="prop1" value="*"/>
<param name="prop2" value="*"/>
</applet-desc>
在你的 Applet.init()
方法,获取 SYS_PROPERTY_PARAMETERS
的值参数,并对其进行迭代以获取每个参数的值。如果不是文字 "*"
,使用 System.setProperty()
将其复制到系统属性.
这是一个 bug in the Oracle plugin这是通过使用 LiveConnect(Java <-> JavaScript 交互)触发的。
为通过 <property/>
设置的所有系统属性添加前缀JNLP 中的元素 "jnlp."
:
<property name="jnlp.my-prop" value="fixed-value"/>
然后在你应用程序的main()
或 Applet.init()
方法,遍历 的副本 System.getProperties()
并且,如果属性名称以 "jnlp."
开头,将其值复制到同名的属性中,并去掉该前缀。 (迭代副本是避免 ConcurrentModificationException
的必要条件。)
最后,如果您填写属性值的过程可能导致 JNLP 文档中其他元素的属性被重新排序,这可能会导致 JNLP 模板验证失败。 (使用 DOM 解析器解析 JNLP,填充通配符,然后使用 StreamResult
将其流回流出是这可能发生的一种方式。)例如,我有这两个多属性元素,元素的顺序有匹配:
<jnlp codebase="*" spec="1.0+">
<j2se java-vm-args="-Xms256M -Xmx512M -XX:MaxPermSize=256m" version="1.6+"/>
关于java - 如何通过 JNLP 将值可能更改为已签名的 Java RIA(applet、webstart)的任意系统属性传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20430289/
我正在开发一款使用 LWJGL 的游戏,因此需要特定于每个平台的 native 库。上 this page ,作者展示了如何使用使用 Java Webstart 标记以包含包含适当 native 库的
非常感谢所有愿意花时间阅读的人。 我正在努力制作一个 webstart Swing 1.4.2_12 应用程序以使用 java webstart 1.6.0_29 启动。 场景如下: 所有流量都通过
我的 WebStart 小程序无法在两个浏览器或两个浏览器选项卡/窗口中工作。因此,我不想允许运行我的小程序的多个实例。 有谁知道一种方法可以防止小程序的第二个实例运行或检查我的小程序的一个实例在新的
我习惯于向独立的 Java 应用程序添加日志记录,并使用 log4j 和 sl4j 将日志写入文件。我正在将一些应用程序移动到 Java Web 启动格式,但我不清楚执行日志记录以监视应用程序行为的最
有没有办法反编译java webstart应用程序? 最佳答案 启动应用程序,然后从 Webstart 缓存中获取 JAR。像任何其他 Java 应用程序一样继续反编译。 关于java webstar
我有一个使用 webstart 的 EJB 3.0 项目,我正在尝试将其作为 WAR 部署到 JBoss AS 7.1.1。我可以很好地访问 html 页面,但是当我单击 webstart 链接时,它
我们有一个 webstart 应用程序,在启动后使用 EJB 连接到 jboss 服务器。我们最近将此服务器迁移到 jboss5 并更新了连接到它的 webstart 应用程序。现在我们遇到了一个问题
我有一个 logging.properties 文件,我在运行时加载到我的 java 应用程序中: final InputStream logFileInputStream= this.getClas
我必须通过 Java Webstart 部署 Java 应用程序。 Webstart 下载所需的应用程序 jar 和库 jar,然后在下载完所有内容后,应用程序启动前会有 50 秒的延迟。 直接在计算
我将 Java WebStart 与我正在开发的这个简单应用程序一起使用,我还制作了它,以便它能够检查最新版本的 jar 文件的更新。尽管在运行它时,我收到一条错误消息,指出服务器缺少版本响应。 下面
我正在使用 javaws 在 OS X 10.5.7、Java(TM) SE 运行时环境(内部版本 1.6.0_13-b03-211)中运行应用程序,并且命令行参数似乎在 OS X 中被破坏。我在 L
我需要将动态生成的参数( token )传递给 Web 启动应用程序。问题是,除非应用程序之前被 JWS 缓存,否则参数不会被传递。我试过这样传递它: 并使用 System.getProperty
我有一个在办公室使用的小型 javafx2 应用程序。有些人从 Firefox 运行它,有些人将它作为桌面应用程序运行。 Webstart 很棒。 目前的做法是我在jnlp文件中添加了这个:
这看起来像是一个已解决的老问题,但不幸的是我找不到好的引用资料。我有一个使用 Javaassist 的 Java 应用程序。在我将它升级到 webstart 应用程序之前,它工作正常。现在 Javaa
我有一个带有许多依赖 jar(大约 20 个)的 java webstart 应用程序,它作为独立应用程序在开发环境中快速启动。然而,当它部署在 java webstart 中时,启动时间很慢(1 分
Java Webstart 命令行中有什么选项可以跳过安全检查?这仅用于测试目的。 javaws myfile.jar 最佳答案 我相信 Sun JDK 中有两个未记录的命令行选项:-secure(讽
有没有办法将 Stdin 和 Stdout/Stderr 路由到 java webstart 中的另一个进程?我想做的是让 java webstart 应用程序与桌面上的其他进程进行通信。理想情况下,
我一直在尝试让 webstart 在内存不足时转储到堆转储。 我知道 jmap/jconsole 的做法,但我真正想做的是将选项添加到 jnlp 文件并尝试了以下选项。 j2se version="1
我如何在 java webstart .jnlp 文件中指定我的一些 jar 覆盖 JRE 内置实现?就像常规应用程序上认可的 lib 属性一样。 最佳答案 似乎没有办法在 web start 中定义
如何避免Java webstart 不缓存jar 文件? 在开发中,我想避免在 java webstart 中进行缓存。在我的 lanuch.jnlp 中,如果我每次都更改 jar 版本号,它会强制下
我是一名优秀的程序员,十分优秀!