JavaTM Platform
Standard Ed. 6

javax.security.auth.callback
인터페이스 CallbackHandler



public interface CallbackHandler

기본 시큐리티 서비스가 사용자명이나 패스워드등의 특정의 인증 데이터를 취득하거나 에러나 경고 메세지등의 특정의 정보를 표시하거나 할 수 있도록(듯이), 어플리케이션은 CallbackHandler 을 구현해, 기본 시큐리티 서비스에 건네줍니다.

CallbackHandler 는 어플리케이션 고유의 형식에서 구현됩니다. 예를 들어, 그래피컬 사용자 인터페이스 (GUI)를 가지는 어플리케이션에 있어서의 구현에서는, 윈도우를 pop-up 해, 정보를 요구하는 prompt나, 에러 메세지를 표시합니다. 또, 요구된 정보를, 최종 사용자에게 묻는 것이 아니라, 다른 소스로부터 취득하는 일도 선택할 수 있습니다.

기본 시큐리티 서비스에서는, 개개의 Callback 를 CallbackHandler 에 건네주는 것으로, 다양한 타입의 정보를 요구할 수 있습니다. CallbackHandler 의 구현에서는, 건네받는 Callback 에 의해 바뀌는 정보의 취득과 표시의 방법을 결정하게 됩니다. 예를 들어, 기본 서비스로 사용자를 인증하기 위해서 사용자명으로 패스워드가 필요한 경우는,NameCallbackPasswordCallback 를 사용합니다. CallbackHandler 에서는, 사용자명과 패스워드를 차례로 입력시키는지, 1 개의 윈도우내에 양쪽 모두를 입력시키는지를 선택할 수 있습니다.

디폴트의 CallbackHandler 클래스의 구현은, auth.login.defaultCallbackHandler 시큐리티 프로퍼티으로 지정되고 있습니다. 시큐리티 프로퍼티은, <JAVA_HOME>/lib/security/java.security 라는 이름의 파일에 포함되고 있는 Java 시큐리티 프로퍼티 파일로 설정할 수 있습니다. <JAVA_HOME> 는 java.home 시스템 프로퍼티의 값을 참조하고 있어, JRE 의 인스톨 디렉토리를 나타냅니다.

시큐리티 프로퍼티이 CallbackHandler 구현 클래스의 완전 지정명으로 설정되어 있는 경우,LoginContext 는 지정한 CallbackHandler 를 로드해, 기본이 되는 LoginModule 에 건네줍니다. 그렇지 않은 경우,LoginContext 는 디폴트의 핸들러만을 로드합니다.

모든 디폴트 핸들러의 구현에서는, 인수를 가지지 않는 public 생성자 이 없으면 안됩니다.


메소드의 개요
 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))). 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 개(살) 이상을 지원하지 않는 경우

JavaTM Platform
Standard Ed. 6

버그의 보고와 기능의 요청
한층 더 자세한 API 레퍼런스 및 개발자 문서에 대해서는,Java SE 개발자용 문서를 참조해 주세요. 개발자전용의 상세한 해설, 개념의 개요, 용어의 정의, 버그의 회피책, 및 코드 실례가 포함되어 있습니다.

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.