JavaTM 2 Platform
Standard Ed. 6

javax.security.auth
類別 Policy

java.lang.Object
  繼承者 javax.security.auth.Policy

已過時。 從 JDK 1.4 版本開始,由 java.security.Policy 取代。java.security.Policy 有一個方法:
        public PermissionCollection getPermissions
            (java.security.ProtectionDomain pd)
 
 
ProtectionDomain 有一個建構子:
        public ProtectionDomain
            (CodeSource cs,
             PermissionCollection permissions,
             ClassLoader loader,
             Principal[] principals)
 
這兩個 API 為調用者提供向 Policy 查詢基於 Principal 的 Permission 條目的方法。

@Deprecated
public abstract class Policy
extends Object

這是用於表示基於 Subject 授權的系統策略的抽象類別。此類別的子類別實作提供一種方式來指定一個基於 Subject 的存取控制 Policy

可以通過以下方式查詢 Policy 物件,尋找授予作為 Principal 運行的程式碼的 Permission 集合:

        policy = Policy.getPolicy();
        PermissionCollection perms = policy.getPermissions(subject,
                                                        codeSource);
 
Policy 物件查詢本地策略,且返回適當的 Permissions 物件,該物件所具有的權限被授予與所提供的 subject 相關聯的 Principals,同時也授予由提供的 codeSource 指定的程式碼。

Policy 套件含下面的資訊。注意,此例子只表示預設的 Policy 實作的語法。此類別的子類別實作可以實作替代語法,也可以根據任何如檔案、資料庫或伺服器之類別的源獲取 Policy

Policy 中的每一項表示為一個 grant 條目。每個 grant 條目指定程式碼基、程式碼簽章者和 Principals 三元組,以及授予該三元組的 Permissions。

        grant CodeBase ["URL"], Signedby ["signers"],
              Principal [Principal_Class] "Principal_Name" {
            Permission Permission_Class ["Target_Name"]
                                        [, "Permission_Actions"]
                                        [, signedBy "SignerName"];
        };
 
三元組名稱/值對的組成部分 CodeBase 和 Signedby 是可選的。如果它們不存在,任何程式碼基和任何簽章者(包括未簽章程式碼)都將相符。例如,
        grant CodeBase "foo.com", Signedby "foo",
              Principal com.sun.security.auth.SolarisPrincipal "duke" {
            permission java.io.FilePermission "/home/duke", "read, write";
        };
 
grant 條目指定 "foo.com" 中的程式碼,由 "foo" 簽章,作為 SolarisPrincipal 運行且名稱為 duke,權限為 Permission。此 Permission 允許執行程式碼在目錄 "/home/duke" 下讀取和寫入檔案。

為了作為一個特定的 Principal“運行”,程式碼調用 Subject.doAs(subject, ...) 方法。調用該方法後,程式碼作為與指定的 Subject 相關聯的所有 Principals 運行。注意,只在調用 Subject.doAs 之後,此 Policy(以及在此 Policy 中授予的 Permission)才有效。

多個 Principals 可以列在一個 grant 條目中。在 grant 條目中的所有 Principals 必須與提供給 Subject.doAsSubject 相關聯,以便授予該 Subject 指定的 Permissions。

        grant Principal com.sun.security.auth.SolarisPrincipal "duke",
              Principal com.sun.security.auth.SolarisNumericUserPrincipal "0" {
            permission java.io.FilePermission "/home/duke", "read, write";
            permission java.net.SocketPermission "duke.com", "connect";
        };
 
此條目授予任何以 "duke" 和 "0" 運行的程式碼在 duke 的主目錄下讀取和寫入檔案的權限,以及創建到 "duke.com" 的Socket連接的權限。

注意,在此 Policy 中不允許非基於 Principal 的 grant 條目。因此,像下面這樣的 grant 條目:

        grant CodeBase "foo.com", Signedby "foo" {
            permission java.io.FilePermission "/tmp/scratch", "read, write";
        };
 
是被拒絕的。這種權限必須列在 java.security.Policy 中。

可以通過把 "auth.policy.provider" 安全屬性(在 Java 安全屬性檔案中)的值設置為所需的 Policy 實作類別的完全限定名,從而改變預設的 Policy 實作。Java 安全屬性檔案位於名稱為 <JAVA_HOME>/lib/security/java.security 的檔案中。<JAVA_HOME> 是指 java.home 系統屬性的值並指定安裝 JRE 的目錄。


建構子摘要
protected Policy()
          已過時。 唯一的建構子。
 
方法摘要
abstract  PermissionCollection getPermissions(Subject subject, CodeSource cs)
          已過時。 獲取授予與指定的 CodeSource 關聯的 Principals 的 Permissions。
static Policy getPolicy()
          已過時。 返回安裝的 Policy 物件。
abstract  void refresh()
          已過時。 刷新/重新載入 Policy。
static void setPolicy(Policy policy)
          已過時。 設置系統級 Policy 物件。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

Policy

protected Policy()
已過時。 
唯一的建構子。(由子類別建構子調用,通常是隱式的)。

方法詳細資訊

getPolicy

public static Policy getPolicy()
已過時。 
返回安裝的 Policy 物件。此方法首先通過 AuthPermission("getPolicy") 權限調用 SecurityManager.checkPermission ,以確保調用者具有獲取 Policy 物件的權限。

返回:
安裝的 Policy。返回值不能為 null
拋出:
SecurityException - 如果當前執行緒不具有獲取此 Policy 物件的權限。
另請參見:
setPolicy(javax.security.auth.Policy)

setPolicy

public static void setPolicy(Policy policy)
已過時。 
設置系統級 Policy 物件。此方法首先通過 AuthPermission("setPolicy") 權限調用 SecurityManager.checkPermission ,以確保調用者具有設置 Policy 物件的權限。

參數:
policy - 新的系統 Policy 物件。
拋出:
SecurityException - 如果當前執行緒不具有設置此 Policy 的權限。
另請參見:
getPolicy()

getPermissions

public abstract PermissionCollection getPermissions(Subject subject,
                                                    CodeSource cs)
已過時。 
獲取授予與指定的 CodeSource 關聯的 Principals 的 Permissions。

參數:
subject - 與此 Subject(主題)所關聯的 Principal(主體)與提供的 CodeSource 共同確定此方法返回的 Permission。此參數可以為 null

cs - 它的 CodeSource 所指定的程式碼,與提供的 CodeSource 一起使用,確定此方法返回的 Permissions。此參數可以為 null
返回:
授予所有的 Subject 以及提供的 subjectcs 參數中指定的程式碼的 Permissions Collection。

refresh

public abstract void refresh()
已過時。 
刷新/重新載入 Policy。

此方法使該物件刷新/重新載入其當前 Policy。這是依賴於實作的。例如,如果 Policy 物件存儲在檔案中,調用 refresh 將會引起重新讀取該檔案。

拋出:
SecurityException - 如果調用者沒有刷新此 Policy 的權限。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only