# Class JAASCallbackHandler

java.lang.Object
org.apache.catalina.realm.JAASCallbackHandler

All Implemented Interfaces:
  `CallbackHandler`

public class JAASCallbackHandler extends Object implements CallbackHandler

Implementation of the JAAS `CallbackHandler` interface, used to negotiate delivery of the username and credentials that were specified to our constructor. No interaction with the user is required (or possible).

This `CallbackHandler` will pre-digest the supplied password, if required by the `<Realm>` element in `server.xml`.

At present, `JAASCallbackHandler` knows how to handle callbacks of type `javax.security.auth.callback.NameCallback` and `javax.security.auth.callback.PasswordCallback`.

Author:
  Craig R. McClanahan, Andrew R. Jaquith

## Field Summary

Fields
Modifier and Type
Field
Description
`protected final String`
`algorithm`
Algorithm.
`protected final String`
`authMethod`
The authentication method to be used.
`protected final String`
`cnonce`
Client generated nonce.
`protected final String`
`digestA2`
Second digest.
`protected final String`
`nc`
Nonce count.
`protected final String`
`nonce`
Server generated nonce.
`protected final String`
`password`
The password to be authenticated with.
`protected final String`
`qop`
Quality of protection applied to the message.
`protected final JAASRealm`
`realm`
The associated `JAASRealm` instance.
`protected final String`
`realmName`
Realm name.
`protected static final StringManager`
`sm`
The string manager for this package.
`protected final String`
`username`
The username to be authenticated with.

## Constructor Summary

Constructors
Constructor
Description
`JAASCallbackHandler(JAASRealm realm, String username, String password)`
Construct a callback handler configured with the specified values.
`JAASCallbackHandler(JAASRealm realm, String username, String password, String nonce, String nc, String cnonce, String qop, String realmName, String digestA2, String algorithm, String authMethod)`
Construct a callback handler for DIGEST authentication.

## Method Summary

Modifier and Type
Method
Description
`void`
`handle(Callback[] callbacks)`
Retrieve the information requested in the provided `Callbacks`.

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### sm

protected static final StringManager sm
The string manager for this package.

### password

protected final String password
The password to be authenticated with.

### realm

protected final JAASRealm realm
The associated `JAASRealm` instance.

### username

protected final String username
The username to be authenticated with.

### nonce

protected final String nonce
Server generated nonce.

### nc

protected final String nc
Nonce count.

### cnonce

protected final String cnonce
Client generated nonce.

### qop

protected final String qop
Quality of protection applied to the message.

### realmName

protected final String realmName
Realm name.

### digestA2

protected final String digestA2
Second digest.

### authMethod

protected final String authMethod
The authentication method to be used. If null, assume BASIC/FORM.

### algorithm

protected final String algorithm
Algorithm.

## Constructor Details

### JAASCallbackHandler

public JAASCallbackHandler(JAASRealm realm, String username, String password)
Construct a callback handler configured with the specified values. Note that if the `JAASRealm` instance specifies digested passwords, the `password` parameter will be pre-digested here.

Parameters:
  `realm` - Our associated JAASRealm instance
  `username` - Username to be authenticated with
  `password` - Password to be authenticated with

### JAASCallbackHandler

public JAASCallbackHandler(JAASRealm realm, String username, String password, String nonce, String nc, String cnonce, String qop, String realmName, String digestA2, String algorithm, String authMethod)
Construct a callback handler for DIGEST authentication.

Parameters:
  `realm` - Our associated JAASRealm instance
  `username` - Username to be authenticated with
  `password` - Password to be authenticated with
  `nonce` - Server generated nonce
  `nc` - Nonce count
  `cnonce` - Client generated nonce
  `qop` - Quality of protection applied to the message
  `realmName` - Realm name
  `digestA2` - Second digest calculated as digest(Method + ":" + uri)
  `algorithm` - The digest algorithm to use
  `authMethod` - The authentication method in use

## Method Details

### handle

public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException
Retrieve the information requested in the provided `Callbacks`. This implementation only recognizes `NameCallback`, `PasswordCallback` and `TextInputCallback`. `TextInputCallback` is used to pass the various additional parameters required for DIGEST authentication.

Specified by:
  `handle` in interface `CallbackHandler`
Parameters:
  `callbacks` - The set of `Callback`s to be processed
Throws:
  `IOException` - if an input/output error occurs
  `UnsupportedCallbackException` - if the login method requests an unsupported callback type