|
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 도 참조해 주세요.