public interface CallbackHandler
| javax.security.auth.callback.CallbackHandler |
应用程序实现 CallbackHandler并将其传递到底层安全服务,以便它们可以与应用程序交互以检索特定的身份验证数据(如用户名和密码)或显示某些信息(如错误和警告消息)。
CallbackHandlers以应用程序依赖的方式实现。 例如,具有图形用户界面(GUI)的应用程序的实现可以弹出窗口来提示请求的信息或显示错误消息。 实施方案也可以选择从备用来源获取请求的信息,而不询问最终用户。
基础安全服务通过将单个回叫传递到CallbackHandler来请求不同类型的信息。 CallbackHandler实现决定如何根据传递给它的回调来检索和显示信息。 例如,如果底层服务需要用户名和密码来验证用户,则它使用NameCallback和PasswordCallback 。 CallbackHandler然后可以选择连续提示输入用户名和密码,或者在单个窗口中提示输入用户名和密码。
可以在auth.login.defaultCallbackHandler安全属性中指定默认的CallbackHandler类实现。 可以在位于名为<JAVA_HOME> /lib/security/java.security的文件中的Java安全属性文件中设置安全属性。 <JAVA_HOME>引用java.home系统属性的值,并指定安装JRE的目录。
如果安全属性设置为CallbackHandler实现类的完全限定名称,则LoginContext将加载指定的CallbackHandler并将其传递到底层的LoginModule。 LoginContext只加载默认处理程序,如果它没有提供。
所有默认的处理程序实现必须提供一个公共的零参数构造函数。
公共方法(Public methods) |
|
|---|---|
abstract void |
handle(Callback[] callbacks) 检索或显示在提供的回调中请求的信息。 |
void handle (Callback[] callbacks)
检索或显示在提供的回调中请求的信息。
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
}
| 参数(Parameters) | |
|---|---|
callbacks |
Callback: an array of Callback objects provided by an underlying security service which contains the information requested to be retrieved or displayed. |
| 抛出异常(Throws) | |
|---|---|
IOException |
if an input or output error occurs. |
UnsupportedCallbackException |
if the implementation of this method does not support one or more of the Callbacks specified in the callbacks parameter. |