| 
 | JavaTM Platform Standard Ed. 6 | |||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
public interface CallbackHandler
 基本セキュリティーサービスがユーザー名やパスワードなどの特定の認証データを取得したり、エラーや警告メッセージなどの特定の情報を表示したりできるように、アプリケーションは CallbackHandler を実装して、基本セキュリティーサービスに渡します。
 
 
CallbackHandler はアプリケーション固有の形式で実装されます。たとえば、グラフィカルユーザーインタフェース (GUI) を持つアプリケーションにおける実装では、ウィンドウをポップアップして、情報を要求するプロンプトや、エラーメッセージを表示します。また、要求された情報を、エンドユーザーに尋ねるのではなく、別のソースから取得することも選択できます。
 基本セキュリティーサービスでは、個々の Callback を  CallbackHandler に渡すことで、さまざまなタイプの情報を要求できます。CallbackHandler の実装では、渡される Callback によって変わる情報の取得と表示の方法を決めることになります。たとえば、基本サービスでユーザーを認証するためにユーザー名とパスワードが必要な場合は、NameCallback と PasswordCallback を使用します。CallbackHandler では、ユーザー名とパスワードを順番に入力させるか、1 つのウィンドウ内に両方を入力させるかを選択できます。
 
 デフォルトの CallbackHandler クラスの実装は、auth.login.defaultCallbackHandler セキュリティープロパティーで指定されています。セキュリティープロパティーは、<JAVA_HOME>/lib/security/java.security という名前のファイルに格納されている Java セキュリティープロパティーファイルに設定できます。<JAVA_HOME> は java.home システムプロパティーの値を参照しており、JRE のインストールディレクトリを示します。
 
 セキュリティープロパティーが CallbackHandler 実装クラスの完全指定名で設定されている場合、LoginContext は指定した CallbackHandler をロードして、基本となる LoginModule に渡します。そうでない場合、LoginContext はデフォルトのハンドラだけをロードします。
 
すべてのデフォルトハンドラの実装では、引数を持たない public コンストラクタがなければいけません。
| メソッドの概要 | |
|---|---|
|  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 のうち 1 つ以上をサポートしない場合| 
 | JavaTM Platform Standard Ed. 6 | |||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | |||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | |||||||||
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。