Beispiel: Angepasstes Anmeldemodul AuthorizationToken
Diese Datei zeigt, wie festgestellt wird, ob es sich um eine Erstanmeldung oder eine Anmeldung durch Weitergabe handelt.
Informationen zu den Aktionen während der Initialisierung, Anmeldung und 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[1];
callbacks[0] = new WSTokenHolderCallback("Authz Token List: ");
try
{
callbackHandler.handle(callbacks);
}
catch (Exception e)
{
// Ausnahmebehandlung
}
// 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
for (int i=0; i<authzTokenList.size(); i++)
{
TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i);
// Sucht nach Namen und Version Ihrer kundenspezifischen
// AuthorizationToken-Implementierung
if (tokenHolder.getName().equals("com.ibm.websphere.security.token.
CustomAuthorizationTokenImpl") && tokenHolder.getVersion() == 1)
{
// Übergibt die Bytes zum Entserialisieren an den kundenspezifischen
// AuthorizationToken-Konstruktor
customAuthzToken = new
com.ibm.websphere.security.token.CustomAuthorizationTokenImpl(
tokenHolder.getBytes());
}
}
}
else
// Dies ist keine Anmeldung durch Weitergabe. Erstellen einer neuen
// Instanz der AuthorizationToken-Implementierung.
{
// Ruft den Principal aus dem Standard-AuthenticationToken ab. Dieser
// muss für alle Token gültig sein.
defaultAuthToken = (com.ibm.wsspi.security.token.AuthenticationToken)
sharedState.get(com.ibm.wsspi.security.auth.callback.Constants.WSAUTHTOKEN_KEY);
String principal = defaultAuthToken.getPrincipal();
// Fügt ein neues angepasstes Berechtigungstoken hinzu. Dies
// ist eine Erstanmeldung.
// Übergibt den Principal an den Konstruktor
customAuthzToken = new com.ibm.websphere.security.token.
CustomAuthorizationTokenImpl(principal);
// Fügt alle Anfangsattribute hinzu
if (customAuthzToken != null)
{
customAuthzToken.addAttribute("key1", "value1");
customAuthzToken.addAttribute("key1", "value2");
customAuthzToken.addAttribute("key2", "value1");
customAuthzToken.addAttribute("key3", "something different");
}
}
// Anmerkung: Sie können das Token während der Commit-Operation dem Subject
// hinzufügen, falls während der Anmeldung ein Fehler auftritt.
}
public boolean commit() throws LoginException
{
if (customAut // (hzToken != null)
{
// Setzt das customAuthzToken-Token im Subject
try
{
public final AuthorizationToken customAuthzTokenPriv = customAuthzToken;
// 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 Berechtigungstoken hinzu, falls
// es nicht null und noch nicht im Subject enthalten ist.
if ((customAuthzTokenPriv != null) &&
(!subject.getPrivateCredentials().contains(customAuthzTokenPriv)))
{
subject.getPrivateCredentials().add(customAuthzTokenPriv);
}
}
catch (Exception e)
{
throw new WSLoginFailedException (e.getMessage(), e);
}
return null;
}
});
}
catch (Exception e)
{
throw new WSLoginFailedException (e.getMessage(), e);
}
}
}
// Variablen für das Anmeldemodul definieren
com.ibm.wsspi.security.token.AuthorizationToken customAuthzToken = null;
com.ibm.wsspi.security.token.AuthenticationToken defaultAuthToken = null;
java.util.Map _sharedState = null;
}