JavaTM 2 Platform
Standard Ed. 6

javax.security.auth.login
類別 Configuration

java.lang.Object
  繼承者 javax.security.auth.login.Configuration

public abstract class Configuration
extends Object

Configuration 物件負責指定應該將哪一個 LoginModule 用於某一特定應用程序,以及應該以什麼樣的順序調用 LoginModule。

登錄配置包含以下資訊。注意,此範例僅表示 Configuration 的預設語法。此類別的子類別實作可以實作替代語法,也可以從任何源(比如檔案、資料庫或伺服器)中檢索 Configuration

      Name {
              ModuleClass  Flag    ModuleOptions;
              ModuleClass  Flag    ModuleOptions;
              ModuleClass  Flag    ModuleOptions;
      };
      Name {
              ModuleClass  Flag    ModuleOptions;
              ModuleClass  Flag    ModuleOptions;
      };
other {
              ModuleClass  Flag    ModuleOptions;
              ModuleClass  Flag    ModuleOptions;
      };
 

Configuration 中的每個條目都是通過應用程序名(Name)進行索引的,並且每個條目都包含為該應用程序配置的 LoginModules 的列表。每個 LoginModule 都是通過其完全限定類別名來指定的。驗證是按指定的具體順序沿著模組列表向下進行。如果應用程序沒有特定條目,則驗證的條目預設為用於“其他方面”的特定條目。

當順著堆疊(stack)空間往下進行驗證時,Flag 值控制整個行為。下面是 Flag 的有效值的描述和它們各自的語義:

1) Required - 要求 LoginModule 成功。
              不管它成功或失敗,驗證都將沿著 LoginModule 列表繼續向下進行。
2) Requisite - 要求 LoginModule 成功。
               如果它成功,則驗證沿著 LoginModule 列表繼續向下進行。
               如果它失敗,則該控制立即返回給應用程序(驗證不再沿著 LoginModule 列表繼續向下進行)。
3) Sufficient - 不要求 LoginModule 成功。
               如果成功,則控制立即返回到應用程序(驗證不再沿著 LoginModule 列表繼續向下進行)。
               如果失敗,則驗證沿著 LoginModule 列表繼續向下進行。
4) Optional - 不要求 LoginModule 成功。
              不管它成功或失敗,驗證都將沿著 LoginModule 列表繼續向下進行。

僅在所有 RequiredRequisite LoginModules 成功時,整個驗證才成功。如果配置了 Sufficient LoginModule 並且獲得成功,則只要 Sufficient LoginModule 之前的 RequiredRequisite LoginModules 是成功的,整個驗證就會成功。如果沒有為應用程序配置 RequiredRequisite LoginModules,那麼至少有一個 SufficientOptional LoginModule 必須成功。

ModuleOptions 是特定於 LoginModule 的值的空格隔開列表,這些值被直接傳遞給底層 LoginModules。這些選項由 LoginModule 自身定義,並在其自身中控制它的行為。例如,LoginModule 可以定義一些選項,以便支持除錯/測試功能。在 Configuration 中指定選項的正確方法是使用如下的鍵-值對:debug="true"。鍵和值應該用等號分隔,值應該用雙引號括起來。如果在值中出現 ${system.property} 形式的 String,則將它擴展為系統屬性值。注意,對 LoginModule 可以定義的選項個數的沒有限制。

下面展示基於以上語法的範例 Configuration 條目:

 Login {
   com.sun.security.auth.module.UnixLoginModule required;
   com.sun.security.auth.module.Krb5LoginModule optional
                   useTicketCache="true"
                   ticketCache="${user.home}${/}tickets";
 };
 

Configuration 指定一個名稱為 "Login" 的應用程序,要求使用者首先對 com.sun.security.auth.module.UnixLoginModule 進行驗證,該驗證必須成功。即使 UnixLoginModule 驗證失敗,com.sun.security.auth.module.Krb5LoginModule 仍將被調用。這有助於隱藏失敗源。由於 Krb5LoginModuleOptional,所以僅在 UnixLoginModule (Required) 成功時,整個驗證才獲得成功。

還要注意的是,特定於 LoginModule 的選項 useTicketCache="true"ticketCache=${user.home}${/}tickets" 被傳遞到 Krb5LoginModule。這些選項指示 Krb5LoginModule 使用指定位置處快取記憶體的票據。系統屬性 user.home/ (file.separator) 擴展成它們各自的值。

在任意給定時間,運行時中只安裝了一個 Configuration 物件。可通過調用 setConfiguration 方法安裝 Configuration 物件。已安裝的 Configuration 物件可通過調用 getConfiguration 方法獲取。

如果運行時中沒有安裝 Configuration 物件,則對 getConfiguration 的調用將安裝一個預設 Configuration 實作的實例(此抽象類別的預設子類別實作)。通過將 "login.configuration.provider" 的安全屬性(在 Java 安全屬性檔案中)的值設置為所需的 Configuration 子類別實作的完全限定名,可以更改預設的 Configuration 實作。Java 安全屬性檔案位於名稱為 <JAVA_HOME>/lib/security/java.security 的檔案中。<JAVA_HOME> 是指 java.home 系統屬型的值,也指定安裝 JRE 的目錄。

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

另請參見:
LoginContext

巢狀類別摘要
static interface Configuration.Parameters
          此類別表示 Configuration 參數的標記介面。
 
建構子摘要
protected Configuration()
          唯一的建構子。
 
方法摘要
abstract  AppConfigurationEntry[] getAppConfigurationEntry(String name)
          獲取此 Configuration 中指定 name 的 AppConfigurationEntry。
static Configuration getConfiguration()
          獲取已安裝的登錄 Configuration。
static Configuration getInstance(String type, Configuration.Parameters params)
          返回指定型別的 Configuration 物件。
static Configuration getInstance(String type, Configuration.Parameters params, Provider provider)
          返回指定型別的 Configuration 物件。
static Configuration getInstance(String type, Configuration.Parameters params, String provider)
          返回指定型別的 Configuration 物件。
 Configuration.Parameters getParameters()
          返回 Configuration 參數。
 Provider getProvider()
          返回此 Configuration 的 Provider。
 String getType()
          返回此 Configuration 的型別。
 void refresh()
          刷新和重新載入 Configuration。
static void setConfiguration(Configuration configuration)
          設置登錄 Configuration
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

Configuration

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

方法詳細資訊

getConfiguration

public static Configuration getConfiguration()
獲取已安裝的登錄 Configuration。

返回:
登錄 Configuration。如果 Configuration 物件是由 Configuration.setConfiguration 方法設置的,則返回該物件。否則返回預設的 Configuration 物件。
拋出:
SecurityException - 如果調用者沒有檢索此 Configuration 的權限。
另請參見:
setConfiguration(javax.security.auth.login.Configuration)

setConfiguration

public static void setConfiguration(Configuration configuration)
設置登錄 Configuration

參數:
configuration - 新的 Configuration
拋出:
SecurityException - 如果當前執行緒沒有設置 Configuration 的 Permission。
另請參見:
getConfiguration()

getInstance

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

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

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

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

getInstance

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

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

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

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

getInstance

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

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

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

getProvider

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

只有在此 Configuration 實例是通過調用 Configuration.getInstance 獲得的時,它才有 Provider。否則,此方法返回 null。

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

getType

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

只有在此 Configuration 實例是通過調用 Configuration.getInstance 獲得的時,它才有型別。否則,此方法返回 null。

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

getParameters

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

只有在此 Configuration 實例是通過調用 Configuration.getInstance 獲得的時,它才有參數。否則,此方法返回 null。

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

getAppConfigurationEntry

public abstract AppConfigurationEntry[] getAppConfigurationEntry(String name)
獲取此 Configuration 中指定 name 的 AppConfigurationEntry。

參數:
name - 用於索引 Configuration 的名稱。
返回:
對應於此 Configuration 中指定 name 的 AppConfigurationEntries 陣列,如果不存在指定的 name 條目,則返回 null。

refresh

public void refresh()
刷新和重新載入 Configuration。

此方法導致此 Configuration 物件以與實作有關的方式刷新/重新載入其內容。例如,如果此 Configuration 物件將其條目存儲在檔案中,則調用 refresh 可能導致重新讀取該檔案。

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

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

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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