モジュール java.base

インタフェースCallbackHandler

既知のすべての実装クラス:
TextCallbackHandler

public interface CallbackHandler

アプリケーションは、CallbackHandlerを実装し、それを基底のセキュリティ・サービスに渡すことで、それらのサービスがアプリケーションと対話してユーザー名やパスワードなど特定の認証データを取得したり、エラーや警告メッセージなど特定の情報を表示したりできるようにします。

CallbackHandlerはアプリケーション固有の形式で実装されます。 たとえば、グラフィカル・ユーザー・インタフェース(GUI)を持つアプリケーションに対する実装では、ウィンドウを表示してリクエストされた情報をプロンプトしたり、エラー・メッセージを表示したりできます。 また、要求された情報を、エンド・ユーザーに尋ねるのではなく、別のソースから取得することも選択できます。

ベースとなるセキュリティ・サービスでは、個々のCallbackをCallbackHandlerに渡すことで、さまざまなタイプの情報を要求できます。 CallbackHandlerの実装では、渡されるCallbackによって情報の取得と表示の方法を決定します。 たとえば、基底のサービスがユーザーを認証するためにユーザー名とパスワードを必要としていれば、NameCallbackおよびPasswordCallbackを使用します。 その後、CallbackHandlerは逐次的にユーザー名およびパスワードの入力を求めるか、または単一のウィンドウで両方の入力を求めるかを選択できます。

CallbackHandlerクラスのデフォルト実装を指定するには、auth.login.defaultCallbackHandlerセキュリティ・プロパティの値を設定します。

セキュリティ・プロパティがCallbackHandler実装クラスの完全指定名で設定されている場合、LoginContextは指定されたCallbackHandlerをロードして、ベースとなるLoginModuleに渡します。 指定されていない場合、LoginContextはデフォルトのハンドラだけをロードします。

すべてのデフォルト・ハンドラの実装では、引数を持たないpublicコンストラクタがなければいけません。

導入されたバージョン:
1.4
関連項目:
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    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のうち1つ以上をサポートしない場合。