2012-10-12 47 views
0

我想爲我們的客戶發佈一個安全策略文件 - Linux和Windows。在java.security文件,我添加了一個行指向我們的文件,但是由於路徑差異我以不同的方式指定它爲Windows和Linux如何在java.security和策略文件中指定平臺無關的路徑?

policy.url.3=file:/${our.home}/lib/OurSecurity.policy # Windows 
policy.url.3=file:${our.home}/lib/OurSecurity.policy # Linux 

這第一個「/」之後的「文件」因爲變量our.home被定義爲「C:\ foo」,所以在windows上是需要的。我已經在政策文件本身同樣的問題:

grant codeBase "file:/${our.home}/-" // Windows 
grant codeBase "file:${our.home}/-" // Linux 

我特別想找一個聰明的方式獨立於平臺的方式來指定代碼庫。順便說一下,重新定義our.home並不是一個真正的選擇,因爲它在FilePermission子句中是需要的。

+0

你是否在自己的代碼中處理這些屬性? –

+0

這些是由JVM直接讀取的標準文件。 –

+0

這是對文件語法的引用:http://docs.oracle.com/javase/1.4.2/docs/guide/security/PolicyFiles.html –

回答

1

如果是我,我會接受這樣的事實,我需要不同的文件,並有一個腳本來刪除「/」生成從Windows版本的Linux版本。

但是,如果你真的需要使用相同的文件,你可以通過只定義另一個環境變量來表示「/」 Windows和有空白的Linux交換一個痛苦另一個。

# our.hack = "/" on windows 
# our.hack = "" on linux 
policy.url.3=file:${our.hack}${our.home}/lib/OurSecurity.policy 

也許我們的.hack不是生產環境中的最好名稱,但您明白了。該變量不用於其他任何事情,所以不應該干擾應用程序的其餘部分。

+0

呀,這些都是到目前爲止,我所擁有的唯一的想法,太。我希望我錯過了更好的東西。 –

0

爲什麼要使用相同的策略文件?
對於Linux和Windows,JRE是不同的,所以你應該遵循這一點,併爲每個安裝保留不同的版本。
國際海事組織在這個的情況下沒有維護有2個文件的問題。
此外,我建議你應該把焦點放在java更新可以刪除你的策略文件的事實上。

+0

想要一個文件的原因是爲了維護。除了那個愚蠢的斜線之外,遵循特定格式的文件對於這兩種環境都是*相同的。未來某個人很容易對一個文件進行更新,而忘記另一個文件。如果不清楚,無論是一個文件還是兩個文件,它們都由我們在我們的可安裝套件中發貨。 –

+0

@DaveC:正如已經說過的,這是一個你不應該關心維護的案例(這裏的擔心是刪除更新中的文件)。如果你認爲你必須提交一個文件,我建議你編寫一些腳本,在每個目標環境中生成文件,同時考慮到斜線,而不是試圖找出一些「黑客」 – Cratylus

相關問題