JavaTM 2 Platform
Standard Ed. 6

java.security
類別 Policy

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

public abstract class Policy
extends Object

Policy 物件負責確定在 Java 運行時環境中執行的程式碼是否有權執行安全敏感的操作。

任意給定時刻只有一個 Policy 物件安裝在運行時中。可以通過調用 setPolicy 方法安裝 Policy 物件。安裝的 Policy 物件可以通過調用 getPolicy 方法獲得。

如果尚未在運行時中安裝任何 Policy 物件,那麼將調用 getPolicy 安裝預設 Policy 實作的實例(此抽象類別的預設子類別實作)。 通過將 "policy.provider" 安全屬性(在 Java 安全屬性檔案中)的值設置為所需 Policy 子類別實作的完全限定名,可以更改預設 Policy 實作。Java 安全屬性檔案位於名為 <JAVA_HOME>/lib/security/java.security 的檔案中。 <JAVA_HOME> 參考 java.home 系統屬性的值,並指定 JRE 的安裝目錄。

應用程序程式碼可以直接子類別化 Policy,提供定制的實作。此外,通過調用某一個 getInstance 處理器方法並使用標準型別作為參數,可以建構一個 Policy 物件的實作。預設策略型別是 "JavaPolicy"。有關標準 Policy 型別列表,請參閱 Java Cryptography Architecture API Specification & Reference 的附錄 A。

安裝了 Policy 實例後(通過預設安裝或調用 setPolicy),在需要確定執行程式碼(封裝在 ProtectionDomain 中)是否可以執行受保護 SecurityManager 操作時,Java 運行時將調用其 implies。Policy 物件如何獲取其策略資料由 Policy 實作本身決定。策略資料可以存儲在純 ASCII 檔案中、Policy 類別的序列化二進制檔案中、資料庫中等等。

refresh 方法使 Policy 物件刷新/重載其資料。 此操作與實作有關。例如,如果 Policy 物件將其資料存儲在配製檔案中,那麼調用 refresh 將導致重讀配製策略檔案。如果不支持刷新操作,那麼此方法不執行任何操作。注意,刷新策略對特定 ProtectionDomain 中的類別可能無效。這取決於 Policy 提供者的 implies 方法實作及其 PermissionCollection 快取記憶體策略。

另請參見:
Provider, ProtectionDomain, Permission

巢狀類別摘要
static interface Policy.Parameters
          此類別表示用於 Policy 參數的標記介面。
 
欄位摘要
static PermissionCollection UNSUPPORTED_EMPTY_COLLECTION
          一個空的只讀 PermissionCollection 實例。
 
建構子摘要
Policy()
           
 
方法摘要
static Policy getInstance(String type, Policy.Parameters params)
          返回指定型別的 Policy 物件。
static Policy getInstance(String type, Policy.Parameters params, Provider provider)
          返回指定型別的 Policy 物件。
static Policy getInstance(String type, Policy.Parameters params, String provider)
          返回指定型別的 Policy 物件。
 Policy.Parameters getParameters()
          返回 Policy 參數。
 PermissionCollection getPermissions(CodeSource codesource)
          返回一個 PermissionCollection 物件,它包含授予指定 CodeSource 的權限集。
 PermissionCollection getPermissions(ProtectionDomain domain)
          返回一個 PermissionCollection 物件,它包含授予指定 ProtectionDomain 的權限集。
static Policy getPolicy()
          返回安裝的 Policy 物件。
 Provider getProvider()
          返回此 Policy 的 Provider。
 String getType()
          返回此 Policy 的型別。
 boolean implies(ProtectionDomain domain, Permission permission)
          計算授予 ProtectionDomain 的權限的全體策略,並測試是否授予了該權限。
 void refresh()
          刷新/重新載入策略配置。
static void setPolicy(Policy p)
          設置系統範圍的 Policy 物件。
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

欄位詳細資訊

UNSUPPORTED_EMPTY_COLLECTION

public static final PermissionCollection UNSUPPORTED_EMPTY_COLLECTION
一個空的只讀 PermissionCollection 實例。

從以下版本開始:
1.6
建構子詳細資訊

Policy

public Policy()
方法詳細資訊

getPolicy

public static Policy getPolicy()
返回安裝的 Policy 物件。此值不應該被快取記憶體,因為它可能通過調用 setPolicy 更改。此方法首先使用 SecurityPermission("getPolicy") 權限調用 SecurityManager.checkPermission 來保證可以獲取 Policy 物件。

返回:
安裝的 Policy。
拋出:
SecurityException - 如果安全管理器存在並且其 checkPermission 方法不允許獲取 Policy 物件。
另請參見:
SecurityManager.checkPermission(Permission), setPolicy(java.security.Policy)

setPolicy

public static void setPolicy(Policy p)
設置系統範圍的 Policy 物件。此方法首先使用 SecurityPermission("setPolicy") 權限調用 SecurityManager.checkPermission 來保證可以設置 Policy。

參數:
p - 新的系統 Policy 物件。
拋出:
SecurityException - 如果安全管理器存在並且其 checkPermission 方法不允許設置 Policy。
另請參見:
SecurityManager.checkPermission(Permission), getPolicy()

getInstance

public static Policy getInstance(String type,
                                 Policy.Parameters params)
                          throws NoSuchAlgorithmException
返回指定型別的 Policy 物件。

此方法從首選 Provider 開始,遍歷已註冊安全提供者列表。返回一個封裝 PolicySpi 實作的新 Policy 物件,該實作取自第一個支持指定型別的 Provider。

注意,已註冊提供者列表可以通過 Security.getProviders() 方法獲得。

參數:
type - 指定的 Policy 型別。有關標準 Policy 型別列表,請參閱 Java Cryptography Architecture API Specification & Reference 的附錄 A。
params - Policy 的參數,可以為 null。
返回:
新的 Policy 物件。
拋出:
SecurityException - 如果調用者無權獲取指定型別的 Policy 實例。
NullPointerException - 如果指定型別為 null。
IllegalArgumentException - 如果選定 Provider 的 PolicySpi 實作不理解指定的參數。
NoSuchAlgorithmException - 如果沒有任何 Provider 支持指定型別的 PolicySpi 實作。
從以下版本開始:
1.6
另請參見:
Provider

getInstance

public static Policy getInstance(String type,
                                 Policy.Parameters params,
                                 String provider)
                          throws NoSuchProviderException,
                                 NoSuchAlgorithmException
返回指定型別的 Policy 物件。

返回一個封裝 PolicySpi 實作的新 Policy 物件,該實作取自指定提供者。注意,指定的提供者必須已在安全提供者列表中註冊。

注意,已註冊提供者列表可以使用 Security.getProviders() 方法獲得。

參數:
type - 指定的 Policy 型別。有關標準 Policy 型別列表,請參閱 Java Cryptography Architecture API Specification & Reference 的附錄 A。
params - Policy 的參數,可以為 null。
provider - 提供者。
返回:
新的 Policy 物件。
拋出:
SecurityException - 如果調用者無權獲取指定型別的 Policy 實例。
NullPointerException - 如果指定型別為 null。
IllegalArgumentException - 如果指定提供者為 null 或空,或者指定提供者的 PolicySpi 實作不理解指定的參數。
NoSuchProviderException - 如果指定提供者沒有在安全提供者列表中註冊。
NoSuchAlgorithmException - 如果指定提供者不支持指定型別的 PolicySpi 實作。
從以下版本開始:
1.6
另請參見:
Provider

getInstance

public static Policy getInstance(String type,
                                 Policy.Parameters params,
                                 Provider provider)
                          throws NoSuchAlgorithmException
返回指定型別的 Policy 物件。

返回一個封裝 PolicySpi 實作的新 Policy 物件,該實作取自指定 Provider 物件。注意,指定的 Provider 物件無需在提供者列表中註冊。

參數:
type - 指定的 Policy 型別。有關標準 Policy 型別列表,請參閱 Java Cryptography Architecture API Specification & Reference 的附錄 A。
params - Policy 的參數,可以為 null。
provider - Provider。
返回:
新的 Policy 物件。
拋出:
SecurityException - 如果調用者無權獲取指定型別的 Policy 實例。
NullPointerException - 如果指定型別為 null。
IllegalArgumentException - 如果指定的 Provider 為 null,或者指定 Provider 的 PolicySpi 實作不理解指定的參數。
NoSuchAlgorithmException - 如果指定的 Provider 不支持指定型別的 PolicySpi 實作。
從以下版本開始:
1.6
另請參見:
Provider

getProvider

public Provider getProvider()
返回此 Policy 的 Provider。

只有通過調用 Policy.getInstance 獲取的 Policy 實例才有 Provider。否則此方法返回 null。

返回:
此 Policy 的 Provider,或者 null。
從以下版本開始:
1.6

getType

public String getType()
返回此 Policy 的型別。

只有通過調用 Policy.getInstance 獲取的 Policy 實例才有型別。否則此方法返回 null。

返回:
此 Policy 的型別,或者 null。
從以下版本開始:
1.6

getParameters

public Policy.Parameters getParameters()
返回 Policy 參數。

只有通過調用 Policy.getInstance 獲取的 Policy 實例才有參數。否則此方法返回 null。

返回:
Policy 參數,或者 null。
從以下版本開始:
1.6

getPermissions

public PermissionCollection getPermissions(CodeSource codesource)
返回一個 PermissionCollection 物件,它包含授予指定 CodeSource 的權限集。

建議應用程序不要調用此方法,因此並非所有策略實作都支持此操作。 應用程序只能依賴 implies 方法執行策略檢查。如果應用程序不得不調用 getPermissions 方法,那麼它應該調用 getPermissions(ProtectionDomain)

此方法的預設實作返回 Policy.UNSUPPORTED_EMPTY_COLLECTION。如果策略實作可以返回授予 CodeSource 的權限組,則可以覆寫此方法。

參數:
codesource - 已授予返回 PermissionCollection 的 CodeSource。
返回:
授予指定 CodeSource 的權限集。如果支持此操作,那麼返回的權限集必須是新的可變實例,並且它必須支持多種 Permission 型別。如果不支持此操作,則返回 Policy.UNSUPPORTED_EMPTY_COLLECTION。

getPermissions

public PermissionCollection getPermissions(ProtectionDomain domain)
返回一個 PermissionCollection 物件,它包含授予指定 ProtectionDomain 的權限集。

建議應用程序不要調用此方法,因此並非所有策略實作都支持此操作。 應用程序應依賴 implies 方法執行策略檢查。

此方法的預設實作首先獲取 getPermissions(CodeSource)(CodeSource 取自指定的 ProtectionDomain)返回的權限,以及位於指定 ProtectionDomain 中的權限。 然後組合所有這些權限,並在一個新的 PermissionCollection 物件中返回。如果 getPermissions(CodeSource) 返回 Policy.UNSUPPORTED_EMPTY_COLLECTION,那麼此方法在一個新的 PermissionCollection 物件中返回包含在指定 ProtectionDomain 中的權限。

如果策略實作支持返回授予 ProtectionDomain 的權限組,則可以覆寫此方法。

參數:
domain - 已授予返回 PermissionCollection 的 ProtectionDomain。
返回:
授予指定 ProtectionDomain 的權限集。如果支持此操作,那麼返回的權限集必須是新的可變實例,並且它必須支持多種 Permission 型別。如果不支持此操作,則返回 Policy.UNSUPPORTED_EMPTY_COLLECTION。
從以下版本開始:
1.4
另請參見:
ProtectionDomain, SecureClassLoader

implies

public boolean implies(ProtectionDomain domain,
                       Permission permission)
計算授予 ProtectionDomain 的權限的全體策略,並測試是否授予了該權限。

參數:
domain - 要測試的 ProtectionDomain
permission - 要測試其暗含權限的 Permission 物件。
返回:
如果 "permission" 是授予此 ProtectionDomain 的真子集,則返回 true。
從以下版本開始:
1.4
另請參見:
ProtectionDomain

refresh

public void refresh()
刷新/重新載入策略配置。此方法的行為取決於實作。例如,對基於檔案的策略調用 refresh 將導致重新讀取該檔案。

此方法的預設實作不執行任何操作。如果策略實作支持刷新操作,則可以覆寫此方法。


JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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