Ejemplo: recuperación de cookies HTTP

En este ejemplo se muestra cómo recuperar una cookie de una solicitud HTTP, decodificar la cookie de modo que vuelva a sus bytes originales y crear su propio objeto SingleSignonToken a partir de los bytes. Este ejemplo muestra cómo se han de llevar a cabo estos pasos desde un módulo de inicio de sesión. No obstante, también puede realizar estos pasos utilizando un servlet.

Para obtener información sobre los pasos de inicialización, inicio de sesión y compromiso a seguir, 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 customLoginModule() 
{
	public void initialize(Subject subject, CallbackHandler callbackHandler, 
     Map sharedState, Map options) 
	{
		_sharedState = sharedState;
	}

	public boolean login() throws LoginException 
	{
     // Maneja WSTokenHolderCallback para ver si se trata de una 
     // conexión inicial o de propagación.
				Callback callbacks[] = new Callback[2];
				  callbacks[0] = new WSTokenHolderCallback("Authz Token List: ");
				callbacks[1] = new WSServletRequestCallback("HttpServletRequest: ");
	        
		try
		{
			callbackHandler.handle(callbacks);
		} 
		catch (Exception e)
		{
			// Maneja la excepción
		} 
            
				// Recibe los objetos ArrayList de TokenHolder (las señales serializadas)
				List authzTokenList = ((WSTokenHolderCallback) callbacks[0]).getTokenHolderList();
				javax.servlet.http.HttpServletRequest request= 
         ((WSServletRequestCallback) callbacks[1]).getHttpServletRequest();
        
		if (request != null)
		{

						// Compruebe si está la cookie
						javax.servlet.http.Cookie[] cookies = request.getCookies();
						String[] cookieStrings = getCookieValues (cookies, "myCookeName1");

						if (cookieStrings != null)
			{
								String cookieVal = null;
								for (int n=0;n<cookieStrings.length;n++)
				{
										cookieVal = cookieStrings[n];
					if (cookieVal.length()>0) 
					{
               // Suprime la codificación de la cookie para obtener los 
               // bytes personalizados
												byte[] cookieBytes = 
							com.ibm.websphere.security.WSSecurityHelper.
                     convertCookieStringToBytes(cookieVal); 
						customSSOToken = 
														new com.ibm.websphere.security.token.
                     CustomSingleSignonTokenImpl(cookieBytes);

               // Ahora que tiene la cookie de la solicitud,
               // puede hacer algo aquí o añadirlo
               // al asunto en el método commit() para utilizarlo posteriormente.
												if (debug || tc.isDebugEnabled())
						{
														System.out.println("*** HE OBTENIDO MI SEÑAL SSO DE LA 
                     SOLICITUD ***");
						}
					}
				}
			}
		}

	}

	public boolean commit() throws LoginException 
	{
					if (customSSOToken != null)
		{
						// Establece la señal customSSOToken en el asunto
			try
			{
								public final SingleSignonToken customSSOTokenPriv = customSSOToken;
          // Debe hacerlo en un bloque de código doPrivileged para que el código de 
          // aplicación no tenga que añadir permisos adicionales
				java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() 
				{
					public Object run() 
					{
						try
						{
                 // Añade la señal SSO personalizada si su valor no es nulo
                 // y todavía no está en el asunto
                          												if ((customSSOTokenPriv != null) && 			
																		(!subject.getPrivateCredentials().
                        contains(customSSOTokenPriv)))
							{
																subject.getPrivateCredentials().add(customSSOTokenPriv);
							}
						} 
						catch (Exception e)
						{
							throw new WSLoginFailedException (e.getMessage(), e);
						}

						return null;
					}
				});
			}
			catch (Exception e)
			{
				throw new WSLoginFailedException (e.getMessage(), e);
			}
		}
	}

		// Método privado para obtener la cookie específico de la solicitud
		private String[] getCookieValues (Cookie[] cookies, String hdrName)
	{
				Vector retValues = new Vector();
				int numMatches=0;
				if (cookies != null)
		{
						for (int i = 0; i < cookies.length; ++i)
			{
				 			if (hdrName.equals(cookies[i].getName()))
				{
										retValues.add(cookies[i].getValue());
					numMatches++;
										System.out.println(cookies[i].getValue());
				}
			}
		}

		if (retValues.size()>0)
						return (String[]) retValues.toArray(new String[numMatches]);
		else
			return null;
	}
	
	// Define las variables del módulo de inicio de sesión
		com.ibm.wsspi.security.token.SingleSignonToken customSSOToken = null;
	com.ibm.wsspi.security.token.AuthenticationToken defaultAuthToken = null;
	java.util.Map _sharedState = 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_httpcookieretrieve
File name: xsec_httpcookieretrieve.html