JavaTM 2
Platform
Std. Ed. v1.4.0

javax.security.auth.callback
インタフェース CallbackHandler


public interface CallbackHandler

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

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

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

デフォルトの CallbackHandler クラスの実装は、auth.login.defaultCallbackHandler セキュリティプロパティで指定されています。セキュリティプロパティは、<JAVA_HOME>/lib/security/java.security というファイルにある Java セキュリティプロパティファイルで設定します。<JAVA_HOME> は、SDK がインストールされているディレクトリです。

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

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


メソッドの概要
 void handle(Callback[] callbacks)
           指定の Callback 内で要求された情報を取得または表示します。
 

メソッドの詳細

handle

public 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 パラメータで指定された 1 つ以上の Callback をサポートしない場合

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.