如何将“不安全”参数传递给Java Webstart应用程序的JVM
作者:互联网
我的Java Webstart应用程序在受控的受信任环境中运行.这是一个封闭的内部网络,在这里我可以控制如何启动应用程序.
即使JVM参数被Webstart认为是“不安全的”,我如何将JVM参数传递给应用程序?
解决方法:
有几种方法可以将JVM参数传递给webstart.
>通过JNLP文件.
>通过JAVA_TOOL_OPTIONS环境变量.
>通过本地计算机上的部署设置.
>通过javaws命令(我无法使其正常工作).
请注意,我已包含指向本文档的Java 8版本的链接.所有其他想法都在其他Java版本中得到支持和记录,但是有时它们的工作方式略有不同,或者限制有所更改.
通过JNLP文件.
JNLP通过JNLP文件支持许多JVM参数.有些可以通过直接设置来完成,例如initial-heap-size和max-heap-size.对于其他设置,可以使用java-vm-args.
JNLP File Syntax文档列出了“此版本”受支持的java-vm-args,但是不确定是示例的版本1.4还是JRE8.我知道实际上支持某些未列出的设置,例如-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 Control Panel完成,它允许您设置默认的运行时设置.
如果要自动执行这些设置,可以使用deployment properties文件.不幸的是,该文件的JRE特定部分未记录.手动调整此文件非常容易:
deployment.javaws.jre.0.args=-XX\:SoftRefLRUPolicyMSPerMB\=2000
自动执行此文件时,必须非常仔细地观察它包含所有检测到的JVM的这些设置,因此必须确保更改正确的设置.而且,它将用于系统上的所有Webstart和applet.
通过javaws命令(我无法使其正常工作)
应该有另一种方式(除了JAVA_TOOL_OPTIONS方法之外)使用命令行来更改参数. javaws documentation列出了-J选项,以将参数传递给JVM,例如,通过如下运行JNLP:
javaws -J-XX:SoftRefLRUPolicyMSPerMB=2000 <my jnlp>
但是,我无法获得此值来实际设置JVM参数.
标签:jvm-arguments,java,java-web-start 来源: https://codeday.me/bug/20191009/1877947.html