设置Java系统属性而不将值放在命令行上

Tom*_*son 6 java linux jboss system-properties

我有一些Java代码,它取决于系统属性super.secret.password.我需要在运行我的应用程序时设置该属性.该应用程序将由shell脚本启动,密码将保存在具有最小读取权限的文件中.

我真的不想写:

java -Dsuper.secret.password=letmein gov.fortknox.MyApp
Run Code Online (Sandbox Code Playgroud)

因为那时任何人都可以进入机器运行ps或者top可以看到密码是什么.

那么,有没有一种很好的方法来设置系统属性而不在命令行上公开它们?

我们提出的唯一通用解决方案是编写一个从文件中读取系统属性的小型C程序,然后使用JNI调用API启动JVM .不用说,我们并不热衷于这样做.

如果没有办法在不使用命令行的情况下设置它们,有没有办法隐藏命令行不被窥探?我们正在使用Red Hat Enterprise Linux Server 5.5.

对于它的价值,有问题的应用程序实际上是JBoss EAP 4.3.0,我们正在使用系统属性${like.this}在其XML配置文件中填写替换构造().有JBoss特定的解决方案 - 使用SystemPropertiesService(默认情况下,通过deploy目录中的properties-service.xml文件配置)或将-P选项传递给run.sh. 但是,我对更一般的情况感兴趣,这可能是任何Java程序.

Dak*_*rra 0

您可以使用 JAVA_TOOL_OPTIONS 环境变量并在那里设置属性。但它仍然在您的脚本文件中可见。