JavaTM 2 Platform
Standard Ed. 6

javax.security.auth.spi
介面 LoginModule


public interface LoginModule

LoginModule 描述由驗證技術提供者實作的介面。LoginModule 插入到應用程序中以提供特定型別的驗證。

當應用程序寫入 LoginContext API 時,驗證技術提供者將實作 LoginModule 介面。Configuration 指定將與特定登錄應用程序一起使用的 LoginModule(s)。因此可以將不同的 LoginModule 插入到應用程序中,而無需修改應用程序本身。

LoginContext 負責讀取 Configuration 和實例化適當的 LoginModule。每個 LoginModule 都是使用 SubjectCallbackHandler、共享的 LoginModule 狀態和特定於 LoginModule 的選項來實例化的。 Subject 表示當前正進行驗證的 Subject,如果驗證成功,則使用相關的 Credential 更新它。LoginModule 使用 CallbackHandler 與使用者進行通信。例如,CallbackHandler 可以用於提示要求使用者名和密碼。注意,CallbackHandler 可以為 null。確實需要一個 CallbackHandler 來對 Subject 進行驗證的 LoginModule 可以拋出 LoginException。LoginModule 可以有選擇地使用共享狀態來共享它們之間的資訊或資料。

特定於 LoginModule 的選項表示由管理員或使用者在 Configuration 中為此 LoginModule 配置的選項。這些選項由 LoginModule 自身定義,並在其中控制其行為。例如,LoginModule 可以定義支持除錯/測試功能的選項。這些選項是使用鍵-值語法定義的,例如 debug=trueLoginModuleMap 形式存儲這些選項,因此可以使用鍵來獲取這些值。注意,對 LoginModule 選擇定義的選項個數是沒有限制的。

調用應用程序將驗證過程視為單個操作。但是,LoginModule 中的驗證過程分兩個不同的階段進行。在第一個階段,LoginModule 的 login 方法由 LoginContext 的 login 方法調用。LoginModulelogin 方法執行實際的驗證(例如,提示並驗證密碼),並將驗證狀態作為私有狀態資訊保存。一旦完成上述操作,LoginModule 的 login 將返回 true(如果成功)或 false(如果應該忽略它),或拋出 LoginException 來指示失敗。在失敗的情況下,LoginModule 不必再嘗試進行驗證或者引入延遲。由應用程序完成這類別任務。如果應用程序試圖重新嘗試驗證,將會再次調用 LoginModule 的 login 方法。

在第二個階段,如果 LoginContext 的整個驗證成功(相關的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModule 成功),則調用 LoginModulecommit 方法。LoginModulecommit 方法檢查其私有保存狀態,以查看自己的驗證是否成功。如果整個 LoginContext 驗證成功,並且 LoginModule 自己的驗證也獲得成功,則 commit 方法會將相關的 Principal(已進行驗證的身份)和 Credential(驗證資料,如加密密鑰)與位於 LoginModule 中的 Subject 聯繫在一起。

如果 LoginContext 的整個驗證失敗(相關的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModule 沒有成功),則調用每個 LoginModuleabort 方法。在這種情況下,LoginModule 移除/銷毀原先保存的任何驗證狀態。

註銷 Subject 只涉及一個階段。LoginContext 調用 LoginModule 的 logout 方法。然後 LoginModulelogout 方法執行註銷過程,例如從 Subject 中移除 Principal 或 Credential,或者記錄Session資訊。

LoginModule 實作必須有一個無參數的建構子。這允許載入 LoginModule 的類別對其進行實例化。

另請參見:
LoginContext, Configuration

方法摘要
 boolean abort()
          中止驗證過程的方法(階段 2)。
 boolean commit()
          提交驗證過程的方法(階段 2)。
 void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options)
          初始化此 LoginModule。
 boolean login()
          對 Subject 進行驗證的方法(階段 1)。
 boolean logout()
          註銷 Subject 的方法。
 

方法詳細資訊

initialize

void initialize(Subject subject,
                CallbackHandler callbackHandler,
                Map<String,?> sharedState,
                Map<String,?> options)
初始化此 LoginModule。

在此 LoginModule 已經實例化後,由 LoginContext 調用此方法。此方法的目的是使用相關的資訊初始化此 LoginModule。如果此 LoginModule 不理解存儲在 sharedStateoptions 參數中的任何資料,則可以忽略它們。

參數:
subject - 要進行驗證的 Subject

callbackHandler - 用來與最終使用者通信的 CallbackHandler(例如,提示要求使用者名和密碼)。

sharedState - 與其他已配置的 LoginModule 共享的狀態。

options - 在登錄 Configuration 中為此特定的 LoginModule 指定的選項。

login

boolean login()
              throws LoginException
Subject 進行驗證的方法(階段 1)。

此方法的實作對 Subject 進行驗證。例如,它可以向 Subject 提示一些資訊(比如使用者名和密碼),然後試圖驗證該密碼。此方法將驗證嘗試的結果作為私有狀態保存在 LoginModule 中。

返回:
如果驗證成功,則返回 true;如果應該忽略此 LoginModule,則返回 false。
拋出:
LoginException - 如果驗證失敗

commit

boolean commit()
               throws LoginException
提交驗證過程的方法(階段 2)。

如果 LoginContext 的整個驗證成功(相關的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModule 成功),則調用此方法。

如果此 LoginModule 自己的驗證嘗試成功(通過獲取 login 方法保存的私有狀態檢查),則此方法會將相關的 Principal 和 Credential 與位於 LoginModule 中的 Subject 聯繫在一起。如果此 LoginModule 自己的驗證嘗試失敗,則此方法將移除/銷毀原先保存的任何狀態。

返回:
如果此方法成功,則返回 true;如果應該忽略此 LoginModule,則返回 false。
拋出:
LoginException - 如果提交失敗。

abort

boolean abort()
              throws LoginException
中止驗證過程的方法(階段 2)。

如果 LoginContext 的整個驗證失敗(相關的 REQUIRED、REQUISITE、SUFFICIENT 和 OPTIONAL LoginModule 沒有成功),則調用此方法。

如果此 LoginModule 自己的驗證嘗試成功(通過獲取 login 方法保存的私有狀態檢查),則此方法將清除任何原先保存的狀態。

返回:
如果此方法成功,則返回 true;如果應該忽略此 LoginModule,則返回 false。
拋出:
LoginException - 如果中止失敗

logout

boolean logout()
               throws LoginException
註銷 Subject 的方法。

此方法的實作可以移除/銷毀 Subject 的 Principal 和 Credential。

返回:
如果此方法成功,則返回 true;如果應該忽略此 LoginModule,則返回 false。
拋出:
LoginException - 如果註銷失敗

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

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