|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
| 개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 | |||||||||
public interface CallbackHandler
기본 시큐리티 서비스가 사용자명이나 패스워드등의 특정의 인증 데이터를 취득하거나 에러나 경고 메세지등의 특정의 정보를 표시하거나 할 수 있도록(듯이), 어플리케이션은 CallbackHandler 을 구현해, 기본 시큐리티 서비스에 건네줍니다.
CallbackHandler 는 어플리케이션 고유의 형식에서 구현됩니다. 예를 들어, 그래피컬 사용자 인터페이스 (GUI)를 가지는 어플리케이션에 있어서의 구현에서는, 윈도우를 pop-up 해, 정보를 요구하는 prompt나, 에러 메세지를 표시합니다. 또, 요구된 정보를, 최종 사용자에게 묻는 것이 아니라, 다른 소스로부터 취득하는 일도 선택할 수 있습니다.
기본 시큐리티 서비스에서는, 개개의 Callback 를 CallbackHandler 에 건네주는 것으로, 다양한 타입의 정보를 요구할 수 있습니다. CallbackHandler 의 구현에서는, 건네받는 Callback 에 의해 바뀌는 정보의 취득과 표시의 방법을 결정하게 됩니다. 예를 들어, 기본 서비스로 사용자를 인증하기 위해서 사용자명으로 패스워드가 필요한 경우는,NameCallback 과 PasswordCallback 를 사용합니다. 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 내에서 요구된 정보를 취득 또는 표시합니다. |
| 메소드의 상세 |
|---|
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 |
|||||||||
| 전의 클래스 다음의 클래스 | 프레임 있어 프레임 없음 | |||||||||
| 개요: 상자 | 필드 | 생성자 | 메소드 | 상세: 필드 | 생성자 | 메소드 | |||||||||
Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms . Documentation Redistribution Policy 도 참조해 주세요.