2010-12-23 79 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。