JavaTM 2 Platform
Standard Ed. 6

javax.security.auth.login
類別 LoginContext

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

public class LoginContext
extends Object

LoginContext 類別描述用於驗證 Subjects 的基本方法和提供開發與底層驗證技術無關的應用程序的方法。Configuration 指定將與特定應用程序一起使用的驗證技術或 LoginModule。可以將不同的 LoginModules 插入到應用程序中而無需修改應用程序本身。

除了支持可插入 驗證之外,此類別還支持堆疊(stack)空間式 驗證的概念。可將應用程序配置為使用多於一個的 LoginModule。例如,可以在應用程序上配置 Kerberos LoginModule 和智能卡 LoginModule。

典型的調用者使用名稱CallbackHandler 來實例化 LoginContext。LoginContext 使用名稱 作為 Configuration 中的索引,以確定應該使用哪些 LoginModules,並確定為了使整個驗證成功,哪些驗證是必須成功的。把 CallbackHandler 被傳遞給底層 LoginModules,因此它們可以與使用者通信和交互(例如,通過圖形使用者介面提示使用者名和密碼)。

一旦調用者已經實例化一個 LoginContext,則它會調用 login 方法對 Subject 進行驗證。login 方法調用配置的模組來執行它們各自型別的驗證(使用者名/密碼、智能卡 pin 碼驗證,等等)。注意,如果驗證失敗,則 LoginModules 不會嘗試重新進行驗證,也不會導致延遲。這類別任務屬於 LoginContext 調用者。

如果 login 方法返回而不是拋出一個異常,則整個驗證就獲得成功了。接著調用者可以通過調用 getSubject 方法來檢索新驗證的 Subject。與 Subject 關聯的 Principals 和 Credentials 可以通過分別調用 Subject 的 getPrincipalsgetPublicCredentialsgetPrivateCredentials 方法來進行檢索。

調用者可通過調用 logout 方法註銷 Subject。與對待 login 方法類似,此 logout 方法對已配置的模組調用 logout 方法。

LoginContext 不應該用於對一個以上的 Subject 進行驗證。單個 LoginContext 應該用於對每個不同的 Subject 進行驗證。

以下文檔適用於所有的 LoginContext 建構子:

  1. Subject
  2. Configuration
  3. CallbackHandler

注意,Security Properties(比如 auth.login.defaultCallbackHandler)可以通過 java.security.Security 類別以程式的方式來進行設置,或者是在名為 <JAVA_HOME>/lib/security/java.security的 Java 安全屬性檔案中靜態設置的。<JAVA_HOME> 是指java.home 系統屬性的值並且指定安裝 JRE 的目錄)

另請參見:
Security, AuthPermission, Subject, CallbackHandler, Configuration, LoginModule

建構子摘要
LoginContext(String name)
          使用 name 實例化一個新 LoginContext 物件。
LoginContext(String name, CallbackHandler callbackHandler)
          使用 name 和 CallbackHandler 物件實例化一個新 LoginContext 物件。
LoginContext(String name, Subject subject)
          使用 name 和 Subject 物件實例化一個新 LoginContext 物件。
LoginContext(String name, Subject subject, CallbackHandler callbackHandler)
          使用 name、要進行驗證的 SubjectCallbackHandler 物件實例化一個新 LoginContext 物件。
LoginContext(String name, Subject subject, CallbackHandler callbackHandler, Configuration config)
          使用 name、要進行驗證的 SubjectCallbackHandler 物件和登錄 Configuration 來實例化一個新 LoginContext 物件。
 
方法摘要
 Subject getSubject()
          返回已進行驗證的 Subject。
 void login()
          執行驗證。
 void logout()
          註銷 Subject
 
從類別 java.lang.Object 繼承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

建構子詳細資訊

LoginContext

public LoginContext(String name)
             throws LoginException
使用 name 實例化一個新 LoginContext 物件。

參數:
name - 用作為 Configuration 中的索引的名稱。
拋出:
LoginException - 如果調用者指定的 nameConfiguration 中沒有出現,並且不存在用於 "other" 的 Configuration 條目,或者設置了 auth.login.defaultCallbackHandler 安全屬性,但是無法載入實作類別。

SecurityException - 如果設置了 SecurityManager,但調用者沒有 AuthPermission("createLoginContext.name") 權限,或者 name 的配置條目不存在,並且調用者沒有 AuthPermission("createLoginContext.other") 權限。

LoginContext

public LoginContext(String name,
                    Subject subject)
             throws LoginException
使用 name 和 Subject 物件實例化一個新 LoginContext 物件。

參數:
name - 用作為 Configuration 中的索引的名稱。

subject - 要進行驗證的 Subject
拋出:
LoginException - 如果調用者指定的 nameConfiguration 中沒有出現,並且不存在用於 "other" 的 Configuration 條目,如果調用者指定的 subjectnull,或者設置了 auth.login.defaultCallbackHandler 安全屬性,但是不能載入實作類別。

SecurityException - 如果設置了 SecurityManager 但調用者沒有 AuthPermission("createLoginContext.name") 權限,或者 name 的配置條目不存在,並且調用者又沒有 AuthPermission("createLoginContext.other") 權限。

LoginContext

public LoginContext(String name,
                    CallbackHandler callbackHandler)
             throws LoginException
使用 name 和 CallbackHandler 物件實例化一個新 LoginContext 物件。

用作為 Configuration 中的索引的名稱。

參數:
callbackHandler - LoginModules 用來與使用者通信的 CallbackHandler 物件。
拋出:
LoginException - 如果調用者指定的 nameConfiguration 中沒有出現,並且不存在用於 "other" 的 Configuration 條目,或者調用者指定的 callbackHandlernull

SecurityException - 如果設置了 SecurityManager 但調用者沒有 AuthPermission("createLoginContext.name") 權限,或者 name 的配置條目不存在並且調用者又沒有 AuthPermission("createLoginContext.other") 權限。

LoginContext

public LoginContext(String name,
                    Subject subject,
                    CallbackHandler callbackHandler)
             throws LoginException
使用 name、要進行驗證的 SubjectCallbackHandler 物件實例化一個新 LoginContext 物件。

參數:
name - 用作為 Configuration 中的索引的名稱。

subject - 要進行驗證的 Subject

callbackHandler - LoginModules 用來與使用者通信的 CallbackHandler 物件。
拋出:
LoginException - 如果調用者指定的 nameConfiguration 中沒有出現,並且不存在用於 "other" 的 Configuration 條目,或調用者指定的 subjectnull,或調用者指定的 callbackHandlernull

SecurityException - 如果設置了 SecurityManager 但調用者沒有 AuthPermission("createLoginContext.name") 權限,或者 name 的配置條目不存在並且調用者又沒有 AuthPermission("createLoginContext.other") 權限。

LoginContext

public LoginContext(String name,
                    Subject subject,
                    CallbackHandler callbackHandler,
                    Configuration config)
             throws LoginException
使用 name、要進行驗證的 SubjectCallbackHandler 物件和登錄 Configuration 來實例化一個新 LoginContext 物件。

參數:
name - 用作為調用者指定的 Configuration 中的索引的名稱。

subject - 要進行驗證的 Subjectnull

callbackHandler - LoginModules 用來與使用者通信的 CallbackHandler 物件,或者為 null

config - 列出將被調用來執行驗證的登錄模組的 Configuration,或者為 null
拋出:
LoginException - 如果調用者指定的 nameConfiguration 中沒有出現,並且不存在用於 "other" 的 Configuration 條目。

SecurityException - 如果設置了 SecurityManager,confignull,且任一個調用者都沒有 AuthPermission("createLoginContext.name") 權限,或者 name 的配置條目不存在,並且調用者又沒有 AuthPermission("createLoginContext.other") 權限。
從以下版本開始:
1.5
方法詳細資訊

login

public void login()
           throws LoginException
執行驗證。

此方法對為指定給 LoginContext 建構子的 name 配置的每個 LoginModule 調用 login 方法,由登錄 Configuration 確定。每個 LoginModule 執行各自型別的驗證(使用者名/密碼、智能卡 pin 碼驗證,等等)。

此方法完成由兩個階段組成的驗證過程,如果整個驗證成功(相關的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModules 獲得成功),通過調用每個已配置的 LoginModule 的 commit 方法來完成驗證過程;如果整個驗證失敗,通過調用每個配置的 LoginModule 的 abort 方法來完成驗證過程。如果驗證成功,每個成功的 LoginModule 的 commit 方法會將相關的 Principals 和 Credentials 與 Subject 聯繫起來。如果驗證失敗,則每個 LoginModule 的 abort 方法都移除/銷毀任何以前存儲的狀態。

如果驗證過程的 commit 階段失敗,則整個驗證失敗,且此方法對每個已配置的 LoginModule 調用 abort 方法。

如果因為某種原因導致 abort 階段失敗,此方法將傳播在 login 階段或 commit 階段拋出的原始異常。在上述任何一種情況下,整個驗證都將失敗。

在多個 LoginModules 失敗的情況下,此方法傳播由第一個失敗的 LoginModule 引起的異常。

注意,如果此方法進入 abort 階段(logincommit 階段失敗),不管它們各自的 Configuration flag 參數如何,此方法都將調用為應用程序配置的所有 LoginModules。這實質上意味著在 abort 階段忽略 RequisiteSufficient 語義。這保證能發生正確的清除和狀態恢復。

拋出:
LoginException - 如果驗證失敗。

logout

public void logout()
            throws LoginException
註銷 Subject

此方法對為此 LoginContext 配置的每個 LoginModule 調用 logout 方法。每個 LoginModule 執行各自的註銷過程,包括移除/銷毀 SubjectPrincipalCredential 資訊以及狀態清除。

注意,不管 LoginModules 的 Configuration flag 參數如何,此方法都將調用為應用程序配置的所有 LoginModules。這實質上意味著忽略此方法的 RequisiteSufficient 語義。這保證能發生正確的清除和狀態恢復。

拋出:
LoginException - 如果註銷失敗。

getSubject

public Subject getSubject()
返回已進行驗證的 Subject。

返回:
已進行驗證的 Subject。如果調用者為此 LoginContext 的建構子指定一個 Subject,則此方法將返回調用者指定的 Subject。如果沒有指定 Subject 並且驗證成功,則此方法將返回由此 LoginContext 實例化且用於驗證的 Subject。如果沒有指定 Subject,並且驗證失敗或沒有試圖進行驗證,則此方法返回 null。

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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