- 所有已知的实现类:
-
TextCallbackHandler
public interface CallbackHandler
应用程序实现一个CallbackHandler
并将其传递给底层安全服务,以便它们可以与应用程序交互,检索特定的身份验证数据,如用户名和密码,或显示某些信息,如错误和警告消息。
CallbackHandlers以应用程序相关的方式实现。例如,具有图形用户界面(GUI)的应用程序的实现可能弹出窗口以提示请求的信息或显示错误消息。实现还可以选择从其他来源获取请求的信息,而无需询问最终用户。
底层安全服务通过将单个回调传递给CallbackHandler
来请求不同类型的信息。 CallbackHandler
实现根据传递给它的回调决定如何检索和显示信息。例如,如果底层服务需要用户名和密码来对用户进行身份验证,则使用NameCallback
和PasswordCallback
。然后,CallbackHandler
可以选择串行提示用户名和密码,或在单个窗口中提示两者。
可以通过设置auth.login.defaultCallbackHandler
安全属性的值来指定默认的CallbackHandler
类实现。
如果安全属性设置为CallbackHandler
实现类的完全限定名称,则LoginContext
将加载指定的CallbackHandler
并将其传递给底层的LoginModules。只有在未提供处理程序时,LoginContext
才会加载默认处理程序。
所有默认处理程序实现必须提供一个公共的无参数构造函数。
- 自从:
- 1.4
- 参见:
-
Method Summary
-
Method Details
-
handle
检索或显示提供的回调中请求的信息。
handle
方法的实现检查传入的Callback
对象的实例,以检索或显示请求的信息。以下示例旨在帮助演示handle
方法实现可能是什么样子。此示例代码仅供参考。许多细节,包括适当的错误处理,都被简化了。public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException { for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof TextOutputCallback) { // 根据指定的类型显示消息 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("不支持的消息类型: " + toc.getMessageType()); } } else if (callbacks[i] instanceof NameCallback) { // 提示用户输入用户名 NameCallback nc = (NameCallback)callbacks[i]; // 忽略提供的默认名称 System.err.print(nc.getPrompt()); System.err.flush(); nc.setName((new BufferedReader (new InputStreamReader(System.in))).readLine()); } else if (callbacks[i] instanceof PasswordCallback) { // 提示用户输入敏感信息 PasswordCallback pc = (PasswordCallback)callbacks[i]; System.err.print(pc.getPrompt()); System.err.flush(); pc.setPassword(readPassword(System.in)); } else { throw new UnsupportedCallbackException (callbacks[i], "无法识别的回调"); } } } // 从给定的输入流中读取用户密码。 private char[] readPassword(InputStream in) throws IOException { // 插入代码从输入流中读取用户密码 }
- 参数:
-
callbacks
- 由底层安全服务提供的Callback
对象数组,其中包含要检索或显示的信息。 - 抛出:
-
IOException
- 如果发生输入或输出错误。 -
UnsupportedCallbackException
- 如果此方法的实现不支持callbacks
参数中指定的一个或多个回调。
-