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;

}

Icon that indicates the type of topic Reference topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xsec_custprotokenlmodule
File name: xsec_custprotokenlmodule.html