インタフェース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,
                               System.getProperty("stdin.encoding")))).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つ以上をサポートしない場合。