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

2022-09-03 12:18:54

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

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

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

我一直在努力寻找解决方案,但似乎我的Google-Foo并不像我希望的那样强大。希望你们中的一个人有答案!

非常感谢。

编辑
抱歉,也许我的原始帖子不清楚,但我有兴趣指定java.security文件,通常也称为Java master安全属性文件,而不是在同一目录中找到的java.policy文件。

我的解决方案

我将在这里发布我的解决方案,仅供可能陷入类似情况的其他人参考。

由于我似乎找不到在启动时指定的参数,因此我决定必须放弃java.security属性文件。可以使用 Security 类 (java.security.Security) 在代码中设置属性和提供程序(通常在文件中配置)。因此,至少在此期间,我计划编写一个类,该类将在启动后设置特定于JVM的安全配置(实质上覆盖文件为其他JVM提供的缺省配置)。虽然此解决方案的明显缺点是不会外部化此 JVM 的安全配置,但该解决方案确实为我提供了一种设置 JVM 特定属性和提供程序的方法,而不会影响运行相同 JDK 的其他 JVM 的配置。

我感谢其他人给予的时间和考虑。谢谢 =)


答案 1

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


答案 2

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

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