Ejemplo: módulo de inicio de sesión de señal de propagación personalizado
En este ejemplo se muestra cómo determinar si el inicio de sesión es inicial o de propagación.
public customLoginModule()
{
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map sharedState, Map options)
{
// (Para obtener más información sobre los pasos a seguir durante la inicialización, consulte
// Desarrollo de módulos de inicio de sesión personalizados para una configuración de inicio de sesión del sistema para JAAS
}
public boolean login() throws LoginException
{
// (Para obtener más información sobre los pasos a seguir durante la conexión, consulte
// Desarrollo de módulos de inicio de sesión personalizados para una configuración de inicio de sesión del sistema para JAAS
// Maneja WSTokenHolderCallback para ver si se trata de una conexión o
// o propagación inicial.
Callback callbacks[] = new Callback[1];
callbacks[0] = new WSTokenHolderCallback("Authz Token List: ");
try
{
callbackHandler.handle(callbacks);
}
catch (Exception e)
{
// tratar excepción
}
// Recibe los objetos ArrayList de TokenHolder (las señales serializadas)
List authzTokenList = ((WSTokenHolderCallback) callbacks[0]).getTokenHolderList();
if (authzTokenList != null)
{
// Se itera en la lista buscando la señal personalizada
for (int i=0; i<authzTokenList.size(); i++)
{
TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i);
// Busca el nombre y la versión de la implementación de PropagationToken personalizada
if (tokenHolder.getName().equals("
com.ibm.websphere.security.token.CustomPropagationTokenImpl") &&
tokenHolder.getVersion() == 1)
{
// Pasa los bytes al constructor de PropagationToken personalizado
// que se ha de deserializar
customPropToken = new
com.ibm.websphere.security.token.CustomPropagationTokenImpl(tokenHolder.
getBytes());
}
}
}
else // Esta no es una conexión de propagación. Crea una instancia nueva de la implementación
// de PropagationToken
{
// Añade una señal de propagación personalizada nueva. Se trata de una conexión inicial.
customPropToken = new com.ibm.websphere.security.token.CustomPropagationTokenImpl();
// Añade los atributos iniciales
if (customPropToken != null)
{
customPropToken.addAttribute("key1", "value1");
customPropToken.addAttribute("key1", "value2");
customPropToken.addAttribute("key2", "value1");
customPropToken.addAttribute("key3", "something different");
}
}
// Nota: Puede añadir la señal a la hebra durante la confirmación por si
// sucede algo durante la conexión.
}
public boolean commit() throws LoginException
{
// Para obtener más información sobre lo que debe hacer durante la confirmación, consulte
// Desarrollo de módulos de inicio de sesión personalizados para una configuración de inicio de sesión del sistema para JAAS
if (customPropToken != null)
{
// Establece la señal de propagación en la hebra
try
{
System.out.println(tc, "*** SE HA AÑADIDO MI SEÑAL DE PROPAGACIÓN PERSONALIZADA A LA HEBRA ***");
// Imprime los valores en la señal de propagación deserializada
java.util.Enumeration keys = customPropToken.getAttributeNames();
while (keys.hasMoreElements())
{
String key = (String) keys.nextElement();
String[] list = (String[]) customPropToken.getAttributes(key);
for (int k=0; k<list.length; k++)
System.out.println("Key/Value: " + key + "/" + list[k]);
}
// Esto lo establece en la hebra utilizando getName() + getVersion() como clave
com.ibm.wsspi.security.token.WSSecurityPropagationHelper.addPropagationToken(
customPropToken);
}
catch (Exception e)
{
// Maneja la excepción
}
// Ahora puede comprobar que lo ha establecido correctamente intentando volver a
// obtenerlo desde la hebra e imprimiendo los valores.
try
{
// Esto obtiene Propagationtoken desde la hebra utilizando los parámetros getName()
// y los parámetros getVersion().
com.ibm.wsspi.security.token.PropagationToken tempPropagationToken =
com.ibm.wsspi.security.token.WSSecurityPropagationHelper.getPropagationToken
("com.ibm.websphere.security.token.CustomPropagationTokenImpl", 1);
if (tempPropagationToken != null)
{
System.out.println(tc, "*** HE RECIBIDO MI SEÑAL DE PROPAGACIÓN PERSONALIZADA
DE LA HEBRA ***");
// Imprime los valores en la señal de propagación deserializada
java.util.Enumeration keys = tempPropagationToken.getAttributeNames();
while (keys.hasMoreElements())
{
String key = (String) keys.nextElement();
String[] list = (String[]) tempPropagationToken.getAttributes(key);
for (int k=0; k<list.length; k++)
System.out.println("Key/Value: " + key + "/" + list[k]);
}
}
}
catch (Exception e)
{
// Maneja la excepción
}
}
}
// Define las variables del módulo de inicio de sesión
com.ibm.wsspi.security.token.PropagationToken customPropToken = null;
}