Beispiel: Angepasstes Anmeldemodul mit Tokenweitergabe

Dieses Beispiel zeigt, wie festgestellt wird, ob es sich um eine Erstanmeldung oder eine Anmeldung durch Weitergabe handelt.

public customLoginModule() 
{
	public void initialize(Subject subject, CallbackHandler callbackHandler,
         Map sharedState, Map options)
	{
				// (Weitere Informationen zu den Aktionen, die während der Initialisierung vorgenommen
  // werden müssen, finden Sie im Abschnitt
     // "Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln".)	}

		public boolean login() throws LoginException 
	{
		// (Nähere Informationen zu den während der Anmeldung auszuführen Aktionen finden Sie im Artikel
     // "Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln".)
				// Prüft mit WSTokenHolderCallback, ob es sich um eine
  // Erstanmeldung oder eine Anmeldung durch Weitergabe handelt.
				Callback callbacks[] = new Callback[1];
				callbacks[0] = new WSTokenHolderCallback("Authz Token List: ");
	        
		try 
		{
			callbackHandler.handle(callbacks);
		} 
		catch (Exception e)
		{
				// Behandlung der Ausnahme
		} 
            
				// Empfängt die ArrayList von TokenHolder-Objekten (die serialisierten Token)
				List authzTokenList = ((WSTokenHolderCallback) callbacks[0]).getTokenHolderList();
        
				if (authzTokenList != null)
		{
						// Iteriert durch die Liste und sucht das angepasste Token
						for (int i=0; i<authzTokenList.size(); i++)
			{
								TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i);

								// Namen und Version der angepassten PropagationToken-Implementierung suchen
								if (tokenHolder.getName().equals("
              com.ibm.websphere.security.token.CustomPropagationTokenImpl") &&
				    				    tokenHolder.getVersion() == 1)
				{
										// Bytes zur Entserialisierung an den Konstruktor für das angepasste
     //  PropagationToken übergeben
										customPropToken = new 									
												com.ibm.websphere.security.token.CustomPropagationTokenImpl(tokenHolder.
                  getBytes());

				}
			}
		}
				else // Dies ist keine Anmeldung durch Weitergabe. Erstellen Sie eine
          // neue Instanz der PropagationToken-Implementierung.
		{
						// Neues angepasste PropagationToken hinzufügen. Dies ist eine Erstanmeldung.
						customPropToken = new com.ibm.websphere.security.token.CustomPropagationTokenImpl();

						// Fügt alle Anfangsattribute hinzu
						if (customPropToken != null)
			{
								customPropToken.addAttribute("key1", "value1");
								customPropToken.addAttribute("key1", "value2");
								customPropToken.addAttribute("key2", "value1");
								customPropToken.addAttribute("key3", "something different");
			}
		}

		     // Anmerkung: Sie können das Token während der Commit-Operation dem Thread
     // hinzufügen, falls während der Anmeldung ein Fehler auftritt.
	}

		public boolean commit() throws LoginException 
	{
				// (Weitere Informationen zu den Aktionen während der Festschreibung finden Sie unter
     // "Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln".)
					if (customPropToken != null)
		{
						// PropagationToken im Thread setzen
			try 
			{

								System.out.println(tc, "*** ADDED MY CUSTOM PROPAGATION TOKEN TO THE THREAD ***");
									// Werte im entserialisierten PropagationToken ausgeben
								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]);
				}

								// Mit getName() + getVersion() als Schlüssel im Thread setzen
				com.ibm.wsspi.security.token.WSSecurityPropagationHelper.addPropagationToken(
              customPropToken);
			}
			catch (Exception e)
			{
							// Bearbeitet die Ausnahme
			}


						// Jetzt können Sie prüfen, ob das Token richtig gesetzt wurde, indem Sie es
       // aus dem Thread abrufen und die Werte ausgeben.
			try 
			{
								// PropagationToken mit getName() und getVersion()
          // aus dem Thread abrufen
								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, "*** RECEIVED MY CUSTOM PROPAGATION 
               TOKEN FROM THE THREAD ***");
										// Werte im entserialisierten PropagationToken ausgeben
										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)
			{
							// Bearbeitet die Ausnahme
			}
		}
	}

		// Variablen für das Anmeldemodul definieren
		com.ibm.wsspi.security.token.PropagationToken customPropToken = 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_custprotokenlmodule
Dateiname:xsec_custprotokenlmodule.html