public interface CallbackHandler
ベースとなるセキュリティ・サービスがユーザー名やパスワードなどの特定の認証データを取得したり、エラーや警告メッセージなどの特定の情報を表示したりできるように、アプリケーションはCallbackHandler
を実装して、ベースとなるセキュリティ・サービスに渡します。
CallbackHandlerはアプリケーション固有の形式で実装されます。たとえば、グラフィカル・ユーザー・インタフェース(GUI)を持つアプリケーションにおける実装では、ウィンドウをポップアップして、情報を要求するプロンプトや、エラー・メッセージを表示します。また、要求された情報を、エンド・ユーザーに尋ねるのではなく、別のソースから取得することも選択できます。
ベースとなるセキュリティ・サービスでは、個々のCallbackをCallbackHandler
に渡すことで、さまざまなタイプの情報を要求できます。CallbackHandler
の実装では、渡されるCallbackによって情報の取得と表示の方法を決定します。たとえば、ベースとなるサービスでユーザーを認証するためにユーザー名とパスワードが必要な場合は、NameCallback
とPasswordCallback
を使用します。CallbackHandler
では、ユーザー名とパスワードを順番に入力させるか、1つのウィンドウ内に両方を入力させるかを選択できます。
CallbackHandler
クラスのデフォルト実装を指定するには、auth.login.defaultCallbackHandler
セキュリティ・プロパティの値を設定します。
セキュリティ・プロパティが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つ以上をサポートしない場合。 バグまたは機能を送信
詳細なAPIリファレンスおよび開発者ドキュメントについては、Java SEのドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright© 1993, 2014, Oracle and/or its affiliates. All rights reserved.