1. 程式人生 > >JVM學習筆記6(策略檔案)

JVM學習筆記6(策略檔案)

前面說過關於策略檔案的內容,但是略過了很多東西(比如數字簽名之類的),現在補充說明一下策略檔案的結構。

1.策略檔案

策略檔案其實就是一個ASCII檔案,這個檔案最後會被用來生成Policy物件。檔案中要包含下列語句:

grant [ SignedBy “signer_names" ] [ , CodeBase “URL" ] {
    Permission permission_class_name [ “target_name" ]
    [ , “action"] [, SignedBy “signer_names" ];
    Permission ...
    };

因為學完了關於數字簽名的內容,所以這裡講一下Signed By的意義。Signed By表示CodeBase “URL”是由哪個人或者哪個團體簽名的。翻譯過來就是授予由“signer_names”簽名的所有程式碼某某某些許可權。

在java.policy檔案中還會看到這種語句:

grant codeBase "file:${{java.ext.dirs}}/*" {
其中${{java.ext.dirs}}就是一種屬性擴充套件,類似環境變數中的%JAVA_HOME%。${{java.ext.dirs}}預設路徑是jre/lib/ext 目錄,當然也可以自己指定。

有時候,在檔案的開頭還會有這樣一條語句:

keystore "some_keystore_url", "keystore_type";

這條語句是有關程式碼簽名的說明。"some_keystore_url"表示金鑰儲存的位置, "keystore_type"表示keystore的型別。


2.類載入器與策略

下面的這段話是《深入Java虛擬機器》中所寫,覺得這麼做其實不太安全,但還是先寫上吧。

雖然這個Policy物件代表了一個從程式碼來源到許可權的全域性對映,但是最終還是由類裝載器負責決定程式碼執行時將獲得什麼樣的許可權。例如,一個類裝載器可以完全忽略當前的策略,而隨機地賦予許可權。或者一個類裝載器可以向由Policy物件的getPermissions()方法返回的許可權中在新增一些許可權。例如,如果一個型別裝載器要裝載一個applet程式碼,除了由當前策略可能授予這段程式碼的許可權以外,它還可以新增一個許可權,使得它可以建立一個到這個applet的源主機的socket連線。