繁体   English   中英

如何将“不安全”参数传递给Java Webstart应用程序的JVM

[英]How to pass 'unsafe' arguments to the JVM of a Java Webstart application

我的Java Webstart应用程序在受控的受信任环境中运行。 这是一个封闭的内部网络,在这里我可以控制如何启动应用程序。

即使JVM参数被Webstart认为是“不安全的”,我如何将JVM参数传递给应用程序?

有几种方法可以将JVM参数传递给webstart。

  1. 通过JNLP文件。
  2. 通过JAVA_TOOL_OPTIONS环境变量。
  3. 通过本地计算机上的部署设置。
  4. 通过javaws命令(我无法使其正常工作)。

请注意,我已包含指向本文档的Java 8版本的链接。 所有其他想法都在其他Java版本中得到支持和记录,但是有时它们的工作方式略有不同,或者限制有所更改。

通过JNLP文件。

JNLP通过JNLP文件支持许多JVM参数。 有些可以通过直接设置来完成,例如initial-heap-sizemax-heap-size 对于其他设置,可以使用java-vm-args

JNLP文件语法文档列出了“此版本”的一些受支持的java-vm-args,但是不确定是该示例的1.4+版本1.4+ 。我知道实际上支持某些未列出的设置,例如-XX:MaxGCPauseMillis并激活G1垃圾收集器。 您可以制作一个JNLP,然后使用jinfo -flag MaxGCPauseMillis <pid>来测试设置是否已正确传播。

这是首选方法,因为它不需要对JVM的任何直接控制。 不利的一面是仅支持被视为“安全”的特定参数。

通过JAVA_TOOL_OPTIONS环境变量

使用javaws命令启动Java Webstart时,可以使用JAVA_TOOL_OPTIONS来设置要从该环境启动的所有JVM所需的任何参数。

因此,在Linux中,您可以设置一个不受支持的参数:

export JAVA_TOOL_OPTIONS=-XX:SoftRefLRUPolicyMSPerMB=2000
javaws <my jnlp>

请注意,这将影响使用此系统变量运行的所有Java应用程序。 因此,应非常小心地为所有用户或特定用户设置此设置。 如上例所示,仅针对单个应用程序设置此设置更为安全。

该解决方案的优点是您可以传递所需的任何参数。 缺点是它需要一种启动应用程序的特定方式或非常广泛的设置。 它还需要控制客户端系统。

通过本地计算机上的部署设置

您还可以通过更改JVM的部署设置来传递JVM参数。 这可以通过Java控制面板来完成,该面板允许您设置默认的运行时设置。

如果要自动执行这些设置,则可以使用部署属性文件。 不幸的是,该文件的JRE特定部分未记录。 手动调整此文件非常容易:

deployment.javaws.jre.0.args=-XX\:SoftRefLRUPolicyMSPerMB\=2000

自动执行此文件时,必须非常仔细地观察它包含所有检测到的JVM的这些设置,因此必须确保更改正确的设置。 而且,它将用于系统上的所有Webstart和applet。

通过javaws命令(我无法使其正常工作)

应该有另一种方式(除了JAVA_TOOL_OPTIONS方法之外)使用命令行来更改参数。 javaws文档列出了-J选项,以将参数传递给JVM,例如,通过如下运行JNLP:

javaws -J-XX:SoftRefLRUPolicyMSPerMB=2000 <my jnlp>

但是,我无法获得此值来实际设置JVM参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM