模块 java.base

接口 CallbackHandler

所有已知的实现类:
TextCallbackHandler

public interface CallbackHandler

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

CallbackHandlers 以依赖于应用程序的方式实现。例如,具有图形用户界面 (GUI) 的应用程序的实现可能会弹出窗口以提示请求的信息或显示错误消息。一个实现也可以选择在不询问最终用户的情况下从备用源获取请求的信息。

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

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

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

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

自从:
1.4
参见:
  • 方法总结

    修饰符和类型
    方法
    描述
    void
    handle(Callback[] callbacks)
    检索或显示在提供的回调中请求的信息。
  • 方法详情

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