Module java.base

Interface CallbackHandler

所有已知的实现类:
TextCallbackHandler

public interface CallbackHandler

应用程序实现一个CallbackHandler并将其传递给底层安全服务,以便它们可以与应用程序交互,检索特定的身份验证数据,如用户名和密码,或显示某些信息,如错误和警告消息。

CallbackHandlers以应用程序相关的方式实现。例如,具有图形用户界面(GUI)的应用程序的实现可能弹出窗口以提示请求的信息或显示错误消息。实现还可以选择从其他来源获取请求的信息,而无需询问最终用户。

底层安全服务通过将单个回调传递给CallbackHandler来请求不同类型的信息。 CallbackHandler实现根据传递给它的回调决定如何检索和显示信息。例如,如果底层服务需要用户名和密码来对用户进行身份验证,则使用NameCallbackPasswordCallback。然后,CallbackHandler可以选择串行提示用户名和密码,或在单个窗口中提示两者。

可以通过设置auth.login.defaultCallbackHandler安全属性的值来指定默认的CallbackHandler类实现。

如果安全属性设置为CallbackHandler实现类的完全限定名称,则LoginContext将加载指定的CallbackHandler并将其传递给底层的LoginModules。只有在未提供处理程序时,LoginContext才会加载默认处理程序。

所有默认处理程序实现必须提供一个公共的无参数构造函数。

自从:
1.4
参见:
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    handle(Callback[] callbacks)
    检索或显示提供的回调中请求的信息。
  • Method Details

    • handle

      void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException

      检索或显示提供的回调中请求的信息。

      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参数中指定的一个或多个回调。