|
JavaTM Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
public interface CallbackHandler
应用程序实现 CallbackHandler,并将其传递到底层安全服务,以便它们能与应用程序交互,从而获得特定的验证数据(如用户名和密码),或显示特定的信息(如错误和警告消息)。
CallbackHandler 是以与应用程序相关的方式实现的。例如,通过实现带有图形用户界面(GUI)的应用程序,可以弹出窗口,以提示请求的信息或显示错误消息。实现也可以选择从替换源获取请求信息,而不询问终端用户。
底层安全服务通过向 CallbackHandler 传递单独的 Callback,以请求不同类型的信息。CallbackHandler 实现根据传递给它的 Callback 决定如何获取和显示信息。例如,如果底层服务需要用户名和密码对用户进行验证,则它使用 NameCallback 和 PasswordCallback。接着 CallbackHandler 就连续提示要求输入用户名和密码,或者在一个窗口中提示要求输入用户名和密码。
可以在 auth.login.defaultCallbackHandler 安全属性中指定默认的 CallbackHandler 类实现。可以在 Java 安全属性文件中设置安全属性,Java 安全属性文件位于名称为 <JAVA_HOME>/lib/security/java.security 的文件中。<JAVA_HOME> 是指 java.home 系统属性的值并且指定安装 JRE 的目录。
如果安全属性设置为 CallbackHandler 实现类的完全限定名,那么 LoginContext 将加载指定的 CallbackHandler 并把它传递给底层 LoginModules。如果没有提供处理程序,则 LoginContext 只加载默认的处理程序。
所有默认的处理程序实现必须提供一个公有的无参构造方法。
| 方法摘要 | |
|---|---|
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 Platform Standard Ed. 6 |
|||||||||
| 上一个类 下一个类 | 框架 无框架 | |||||||||
| 摘要: 嵌套 | 字段 | 构造方法 | 方法 | 详细信息: 字段 | 构造方法 | 方法 | |||||||||
版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策。