モジュール java.base

インタフェースCallbackHandler

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

    public interface CallbackHandler

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

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

    ベースとなるセキュリティ・サービスでは、個々のCallbackをCallbackHandlerに渡すことで、さまざまなタイプの情報を要求できます。 CallbackHandlerの実装では、渡されるCallbackによって情報の取得と表示の方法を決定します。 たとえば、ベースとなるサービスでユーザーを認証するためにユーザー名とパスワードが必要な場合は、NameCallbackPasswordCallbackを使用します。 CallbackHandlerでは、ユーザー名とパスワードを順番に入力させるか、1つのウィンドウ内に両方を入力させるかを選択できます。

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

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

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

    導入されたバージョン:
    1.4
    関連項目:
    セキュリティ・プロパティ
    • メソッドの詳細

      • 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つ以上をサポートしない場合。