Top Description Fields Constructors Methods
org.apache.catalina.authenticator.jaspic

public Class CallbackHandlerImpl

extends Object
implements CallbackHandler, Contained
Class Inheritance
All Implemented Interfaces
org.apache.catalina.Contained, javax.security.auth.callback.CallbackHandler
Imports
java.io.IOException, java.security.Principal, java.util.Arrays, .Collections, .List, javax.security.auth.Subject, javax.security.auth.callback.Callback, .CallbackHandler, .UnsupportedCallbackException, jakarta.security.auth.message.callback.CallerPrincipalCallback, .GroupPrincipalCallback, .PasswordValidationCallback, org.apache.catalina.Contained, .Container, org.apache.catalina.realm.GenericPrincipal, org.apache.juli.logging.Log, .LogFactory, org.apache.tomcat.util.res.StringManager

Default implementation of a JASPIC CallbackHandler.

Field Summary

Modifier and TypeField and Description
private Container
private final Log
private static final StringManager

Constructor Summary

AccessConstructor and Description
public

Method Summary

Modifier and TypeMethod and Description
public Container
getContainer()

Implements org.apache.catalina.Contained.getContainer.

Get the Container with which this instance is associated.

private Principal
getPrincipal(Principal principal, String name, String[] groups)

public void
handle(Callback[]
an array of Callback objects provided by an underlying security service which contains the information requested to be retrieved or displayed.
callbacks
)

Implements javax.security.auth.callback.CallbackHandler.handle.

Retrieve or display the information requested in the provided Callbacks.

public void
setContainer(Container
The Container instance with which this instance is to be associated, or null to disassociate this instance from any Container
container
)

Implements org.apache.catalina.Contained.setContainer.

Set the Container with which this instance is associated.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

containerback to summary
private Container container
logback to summary
private final Log log
smback to summary
private static final StringManager sm

Constructor Detail

CallbackHandlerImplback to summary
public CallbackHandlerImpl()

Method Detail

getContainerback to summary
public Container getContainer()

Implements org.apache.catalina.Contained.getContainer.

Doc from org.apache.catalina.Contained.getContainer.

Get the Container with which this instance is associated.

Returns:Container

The Container with which this instance is associated or null if not associated with a Container

Annotations
@Override
getPrincipalback to summary
private Principal getPrincipal(Principal principal, String name, String[] groups)
handleback to summary
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException

Implements javax.security.auth.callback.CallbackHandler.handle.

Doc from javax.security.auth.callback.CallbackHandler.handle.

Retrieve or display the information requested in the provided Callbacks.

The handle method implementation checks the instance(s) of the Callback object(s) passed in to retrieve or display the requested information. The following example is provided to help demonstrate what an handle method implementation might look like. This example code is for guidance only. Many details, including proper error handling, are left out for simplicity.

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.

Annotations
@Override
Exceptions
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.
setContainerback to summary
public void setContainer(Container container)

Implements org.apache.catalina.Contained.setContainer.

Doc from org.apache.catalina.Contained.setContainer.

Set the Container with which this instance is associated.

Parameters
container:Container

The Container instance with which this instance is to be associated, or null to disassociate this instance from any Container

Annotations
@Override