Most visited

Recently visited

Added in API level 1

CallbackHandler

public interface CallbackHandler

javax.security.auth.callback.CallbackHandler


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

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

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

可以在auth.login.defaultCallbackHandler安全属性中指定默认的CallbackHandler类实现。 可以在位于名为<JAVA_HOME> /lib/security/java.security的文件中的Java安全属性文件中设置安全属性。 <JAVA_HOME>引用java.home系统属性的值,并指定安装JRE的目录。

如果安全属性设置为CallbackHandler实现类的完全限定名称,则LoginContext将加载指定的CallbackHandler并将其传递到底层的LoginModule。 LoginContext只加载默认处理程序,如果它没有提供。

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

Summary

Public methods

abstract void handle(Callback[] callbacks)

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

Public methods

handle

Added in API level 1
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.

Hooray!