JavaTM 2 Platform
Standard Ed. 6

javax.security.auth.callback
介面 CallbackHandler


public interface CallbackHandler

應用程序實作 CallbackHandler,並將其傳遞到底層安全服務,以便它們能與應用程序交互,從而獲得特定的驗證資料(如使用者名和密碼),或顯示特定的資訊(如錯誤和警告訊息)。

CallbackHandler 是以與應用程序相關的方式實作的。例如,通過實作帶有圖形使用者介面(GUI)的應用程序,可以彈出視窗,以提示請求的資訊或顯示錯誤訊息。實作也可以選擇從替換源獲取請求資訊,而不詢問終端使用者。

底層安全服務通過向 CallbackHandler 傳遞單獨的 Callback,以請求不同型別的資訊。CallbackHandler 實作根據傳遞給它的 Callback 決定如何獲取和顯示資訊。例如,如果底層服務需要使用者名和密碼對使用者進行驗證,則它使用 NameCallbackPasswordCallback。接著 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 中請求的資訊。
 

方法詳細資訊

handle

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