Beispiel: HTTP-Cookie abrufen

Das folgende Beispiel zeigt, wie Sie ein Cookie aus einer HTTP-Anforderung abrufen, das Cookie in die ursprünglichen Bytes decodieren und aus diesen Bytes ein eigenes SingleSignonToken-Objekt erstellen. Das Beispiel beschreibt die Ausführung dieser Schritte in einem Anmeldemodul. Sie können aber auch ein Servlet verwenden.

Informationen zu den Aktionen während der Anmeldung und der Festschreibung finden Sie unter Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.

public customLoginModule() 
{
	public void initialize(Subject subject, CallbackHandler callbackHandler,
     Map sharedState, Map options)
	{
				_sharedState = sharedState;
	}

		public boolean login() throws LoginException 
	{
     		// Prüft mit WSTokenHolderCallback, ob es sich um eine
  // Erstanmeldung oder eine Anmeldung durch Weitergabe handelt.
				Callback callbacks[] = new Callback[2];
				callbacks[0] = new WSTokenHolderCallback("Authz Token List: ");
				callbacks[1] = new WSServletRequestCallback("HttpServletRequest: ");
	        
		try 
		{
			callbackHandler.handle(callbacks);
		} 
		catch (Exception e)
		{
						// Ausnahme behandeln
		} 
            
				// Empfängt die ArrayList von TokenHolder-Objekten (die serialisierten Token)
				List authzTokenList = ((WSTokenHolderCallback) callbacks[0]).getTokenHolderList();
				javax.servlet.http.HttpServletRequest request = 
         ((WSServletRequestCallback) callbacks[1]).getHttpServletRequest();
        
				if (request != null)
		{

						// Prüft, ob das Cookie vorhanden ist
						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) 
					{
               // Codiertes Cookie in Bytefolge
               // konvertieren
												byte[] cookieBytes = 
							com.ibm.websphere.security.WSSecurityHelper.
                     convertCookieStringToBytes(cookieVal); 
									customSSOToken = new com.ibm.websphere.security.token.
                     CustomSingleSignonTokenImpl(cookieBytes);

               // Sie haben das Cookie aus der Anforderung abgerufen
               // und können es jetzt bearbeiten oder
               // für spätere Verwendung dem Subject in der Methode
               // hinzufügen
												if (debug || tc.isDebugEnabled())
						{
														System.out.println("*** GOT MY CUSTOM SSO TOKEN FROM 
                     THE REQUEST ***");
						}
					}
				}
			}
		}

	}

		public boolean commit() throws LoginException 
	{
				if (customSSOToken != null)
		{
						// Legt das customSSOToken-Token im Subject fest
			try 
			{
								public final SingleSignonToken customSSOTokenPriv = customSSOToken;
          // Fügen Sie dies in einen doPrivileged-Codeblock ein, damit der
          // Anwendungscode keine weiteren Berechtigungen hinzufügen muss.
								java.security.AccessController.doPrivileged(new java.security.PrivilegedAction() 
				{
										public Object run() 
					{
						try 
						{
                 // Fügt das angepasste SSO-Token hinzu, falls
                 // es nicht null und noch nicht im Subject enthalten ist.
                          												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);
			}
		}
	}

		// Private Methode, um das Cookie aus der Anforderung abzurufen
		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;
	}
	
		// Variablen für das Anmeldemodul definieren
		com.ibm.wsspi.security.token.SingleSignonToken customSSOToken = null;
		com.ibm.wsspi.security.token.AuthenticationToken defaultAuthToken = null;
		java.util.Map _sharedState = null;
}

Symbol, das den Typ des Artikels anzeigt. Referenzartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=xsec_httpcookieretrieve
Dateiname:xsec_httpcookieretrieve.html