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;
}