2010-12-23 80 views
11

我在寻找一个java参数(或者可能是某种不同的方法),以允许我指定一个由JVM用作java.security文件的文件,而不是使用JDK中的一个(在JRE库中)。用于为JVM指定Java.Security文件的Java参数

为了给您提供更多的上下文,我正在使用其他人设置的WebLogic服务器,并且正在运行两个(或更多)不同的JVM。现在我们遇到了一个问题,即我在一个JVM上所做的工作需要与当前其他JVM正在使用的java.security文件不同的java.security文件。我希望有一种方法可以让我将JVM指向新的java.security文件,而不必将其指向全新的JDK(由于空间限制,我们希望避免上传特定于每个JVM的JDK )。

我意识到服务器的设置并不理想,但完全重新安排现有设置并不可行,也不是我能够做的事情。所以,我希望有人可能有一个创造性的解决方案,允许多个JVM运行相同的JDK,但具有不同的安全配置。

我一直在试图找到解决方案,但看起来我的Google-Foo没有我希望的那么强大。希望你们中的一个人有答案!

非常感谢。

编辑
对不起,也许我原来的职位还不清楚,但我感兴趣的指定java.security文件中,也常常被称为Java的主控设备安全属性文件,而不是java.policy文件它位于同一个目录中。

我的解决方案

我会在这里发布我的解决方案只是为别人谁可能陷入类似的情况的参考。

由于我似乎无法找到一个参数来指定在启动时,我已决定,我将不得不放弃java.security属性文件。可以使用Security类(java.security.Security)在代码内设置属性和提供程序(通常在文件中配置)。所以,至少在此期间,我打算编写一个类,它将在启动后设置特定于JVM的安全配置(基本上覆盖该文件为其他JVM提供的默认配置)。虽然此解决方案的明显不足之处在于没有对此JVM的安全配置进行外部化,但该解决方案确实为我提供了一种设置JVM特定属性和提供程序的方法,而不会影响运行在同一JDK上的其他JVM的配置。

我很欣赏别人给予的时间和考虑。谢谢=)

回答

6

也许this thread接受的答案会帮助你;基本上它说,你需要指定自己的政策文件,并最终调用应该是这样的:

java -Djava.security.manager -Djava.security.policy=/some/path/my.policy 
+3

谢谢,桑杰。这似乎是一个很好的开始,但如果我错了,纠正我是否指定.policy文件?有没有办法将它应用到.security文件(即主属性文件来配置安全提供程序等)? – Kai 2010-12-23 17:52:06

10

望着OpenJDK source,你不能改变java.security文件的加载。但是,该文件具有名为security.overridePropertiesFile的属性,如果设置为true(因为它在我当前的vanilla安装中),允许您加载通过名为java.security.properties的系统属性指定的其他安全属性文件。另请注意,命令行语法遵循与策略文件类似的模式,其中=指定了其他配置,==指定了完整的替换配置。

+0

去这个源头的方法,詹姆斯!今天我会试试这个,当我有机会,让每个人都知道结果。 – Kai 2010-12-24 14:40:25

+1

尝试此解决方案不会导致结果发生变化。 JVM似乎不会覆盖或附加到安全文件,而只是使用默认文件。 – Kai 2010-12-30 21:23:43

3

您可以设置系统属性-Djava.security.properties = *****来指定要加载的安全性属性,但在使用此方法之前,必须先设置属性security.overridePropertiesFile = true。