|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
public interface CallbackHandler
應用程序實作 CallbackHandler
,並將其傳遞到底層安全服務,以便它們能與應用程序交互,從而獲得特定的驗證資料(如使用者名和密碼),或顯示特定的資訊(如錯誤和警告訊息)。
CallbackHandler 是以與應用程序相關的方式實作的。例如,通過實作帶有圖形使用者介面(GUI)的應用程序,可以彈出視窗,以提示請求的資訊或顯示錯誤訊息。實作也可以選擇從替換源獲取請求資訊,而不詢問終端使用者。
底層安全服務通過向 CallbackHandler
傳遞單獨的 Callback,以請求不同型別的資訊。CallbackHandler
實作根據傳遞給它的 Callback 決定如何獲取和顯示資訊。例如,如果底層服務需要使用者名和密碼對使用者進行驗證,則它使用 NameCallback
和 PasswordCallback
。接著 CallbackHandler
就連續提示要求輸入使用者名和密碼,或者在一個視窗中提示要求輸入使用者名和密碼。
可以在 auth.login.defaultCallbackHandler 安全屬性中指定預設的 CallbackHandler
類別實作。可以在 Java 安全屬性檔案中設置安全屬性,Java 安全屬性檔案位於名稱為 <JAVA_HOME>/lib/security/java.security 的檔案中。<JAVA_HOME> 是指 java.home 系統屬性的值並且指定安裝 JRE 的目錄。
如果安全屬性設置為 CallbackHandler
實作類別的完全限定名,那麼 LoginContext
將載入指定的 CallbackHandler
並把它傳遞給底層 LoginModules。如果沒有提供處理程序,則 LoginContext
只載入預設的處理程序。
所有預設的處理程序實作必須提供一個公有的無參建構子。
方法摘要 | |
---|---|
void |
handle(Callback[] callbacks)
獲取或顯示在提供的 Callback 中請求的資訊。 |
方法詳細資訊 |
---|
void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
獲取或顯示在提供的 Callback 中請求的資訊。
為了獲取或顯示請求的資訊,handle
方法實作檢查傳入的 Callback
物件的實例.下面提供的例子是對 handle
方法實作的示範。此例子程式碼只用來作為指導。為了簡單起見,省去了很多細節(包括適當的錯誤處理)。
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof TextOutputCallback) { // display the message according to the specified type TextOutputCallback toc = (TextOutputCallback)callbacks[i]; switch (toc.getMessageType()) { case TextOutputCallback.INFORMATION: System.out.println(toc.getMessage()); break; case TextOutputCallback.ERROR: System.out.println("ERROR: " + toc.getMessage()); break; case TextOutputCallback.WARNING: System.out.println("WARNING: " + toc.getMessage()); break; default: throw new IOException("Unsupported message type: " + toc.getMessageType()); } } else if (callbacks[i] instanceof NameCallback) { // prompt the user for a username NameCallback nc = (NameCallback)callbacks[i]; // ignore the provided defaultName System.err.print(nc.getPrompt()); System.err.flush(); nc.setName((new BufferedReader (new InputStreamReader(System.in))).readLine()); } else if (callbacks[i] instanceof PasswordCallback) { // prompt the user for sensitive information PasswordCallback pc = (PasswordCallback)callbacks[i]; System.err.print(pc.getPrompt()); System.err.flush(); pc.setPassword(readPassword(System.in)); } else { throw new UnsupportedCallbackException (callbacks[i], "Unrecognized Callback"); } } } // Reads user password from given input stream. private char[] readPassword(InputStream in) throws IOException { // insert code to read a user password from the input stream }
callbacks
- 由底層安全服務提供的 Callback
物件的陣列,包括要獲取或顯示的請求資訊。
IOException
- 如果發生輸入或輸出錯誤。
UnsupportedCallbackException
- 如果此方法的實作不支持在 callbacks
參數中指定的一個或多個 Callback。
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。