|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
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> は、JDK がインストールされているディレクトリです。
セキュリティプロパティが 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 のいずれかをサポートしない場合
|
JavaTM 2 Platform Standard Ed. 5.0 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。