用于为JVM指定Java.Security文件的Java参数

Kai*_*Kai 14 java security jvm weblogic

我正在寻找一个java参数(或者可能是一些不同的方法)来允许我指定一个JVM用作java.security文件的文件,而不是使用在JDK中找到的文件(在JRE lib中) .

为了给你一些更多的上下文,我正在使用由其他人设置的WebLogic服务器,并且在同一个JDK上运行两个(或更多)不同的JVM.我们现在遇到一个问题,我在一个JVM上所做的工作需要一个不同于另一个JVM当前正在使用的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的配置.

我很欣赏他人的时间和考虑.谢谢=)

小智 11

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


San*_*rma 7

也许这个帖子中接受的答案会帮助你; 基本上它表示你需要指定自己的策略文件,最终的调用应该如下所示:

java -Djava.security.manager -Djava.security.policy=/some/path/my.policy
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你,桑杰.这似乎是一个好的开始,但如果我错了就纠正我,是指定一个.policy文件?有没有办法将其应用于.security文件(即主属性文件以配置安全提供程序等)? (3认同)

小智 5

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

  • 不确定早期版本,但如果您查看 Java 8 中 java.security 文件顶部的注释,一切都会很清楚:`-Djava.security.properties=<URL>` 附加到主安全属性文件。如果两个属性文件都为同一键指定了值,则选择命令行属性文件中的值,因为它是最后加载的值。另外,如果您指定“-Djava.security.properties==<URL>”(2 等于),则该属性文件将完全覆盖主安全属性文件。 (2认同)
  • 在以这种方式对覆盖文件的加载进行故障排除时,`-Djava.security.debug=properties` 也可能变得方便 (2认同)