Module  java.base

Interface CallbackHandler

  • 所有已知实现类:
    TextCallbackHandler


    public interface CallbackHandler

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

    CallbackHandler以应用程序相关的方式实现。 例如,具有图形用户界面(GUI)的应用的实现可以弹出窗口以提示所请求的信息或显示错误消息。 实现还可以选择从备用源获得所请求的信息,而不要求最终用户。

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

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

    如果安全属性设置为CallbackHandler实施类的完全限定名称,那么一个LoginContext将加载指定的CallbackHandler并将其传递给基础的LoginModules。 LoginContext仅加载默认处理程序(如果未提供)。

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

    从以下版本开始:
    1.4
    另请参见:
    security properties
    • 方法详细信息

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