Beispiel: Beispielanmeldekonfiguration für RMI_OUTBOUND
Dieses Beispiel zeigt eine Anmeldekonfiguration für RMI_OUTBOUND, die die Realmnamen von zwei Servern zuordnet.
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.)
// Ruft das WSProtocolPolicyCallback-Objekt ab
Callback callbacks[] = new Callback[1];
callbacks[0] = new com.ibm.wsspi.security.auth.callback.
WSProtocolPolicyCallback("Protocol Policy Callback: ");
try
{
callbackHandler.handle(callbacks);
}
catch (Exception e)
{
// Ausnahme behandeln
}
// Empfängt das RMI-Richtlinienobjekt (CSIv2), um den Zielrealm
// basierend auf den Informationen aus der IOR zu überprüfen.
// Anmerkung: Dieses Objekt kann für weitere Sicherheitsprüfungen verwendet werden.
// Nähere Informationen finden Sie in der API-Dokumentation.
csiv2PerformPolicy = (CSIv2PerformPolicy) ((WSProtocolPolicyCallback)callbacks[0]).
getProtocolPolicy();
// Prüft, ob die Realms übereinstimmen. Wenn die Realms nicht übereinstimmen,
// dann anmelden, um eine Zuordnung durchzuführen.
if (!csiv2PerformPolicy.getTargetSecurityName().equalsIgnoreCase(csiv2PerformPolicy.
getCurrentSecurityName()))
{
try
{
// Zuordnung des angepassten Realms zu Benutzer-ID und Kennwort
MyBasicAuthDataObject myBasicAuthData = MyMappingLogin.lookup
(csiv2PerformPolicy.getTargetSecurityName());
// Erstellt den Anmeldekontext mit den aus der angepassten Zuordnung
// erfassten Basisauthentifizierungsdaten
javax.security.auth.login.LoginContext ctx = new LoginContext("WSLogin",
new WSCallbackHandlerImpl(myBasicAuthData.userid,
csiv2PerformPolicy.getTargetSecurityName(),
myBasicAuthData.password));
// Startet die Anmeldung
ctx.login();
// Ruft das Subject aus dem Kontext ab. Dieses Subject ersetzt
// das in der Festschreibungsphase übergebene Subject.
basic_auth_subject = ctx.getSubject();
}
catch (javax.security.auth.login.LoginException e)
{
throw new com.ibm.websphere.security.auth.
WSLoginFailedException (e.getMessage(), e);
}
}
}
public boolean commit() throws LoginException
{
// (Weitere Informationen zu den Aktionen, die während der Festschreibung vorgenommen
// werden müssen, finden Sie im Abschnitt // Angepasste Anmeldemodule für eine Systemanmeldekonfiguration für JAAS entwickeln.)
if (basic_auth_subject != null)
{
// Entfernt alles aus dem aktuellen Subject und fügt alles aus dem
// basic_auth_subject hinzu.
try
{
public final Subject basic_auth_subject_priv = basic_auth_subject;
// Führen Sie diesen Schritt in einem doPrivileged-Block aus, damit der
// Anwendungscode keine zusätzlichen Berechtigungen hinzufügen muss.
java.security.AccessController.doPrivileged(new java.security.
PrivilegedExceptionAction()
{
public Object run() throws WSLoginFailedException
{
// Entfernt alle benutzerspezifischen Daten aus dem aktuellen
// abgehenden Subject. Es ist ein temporäres Subject für diesen
// speziellen Aufruf. Das Subject im Thread ist also nicht betroffen.
// Sie können alle angepassten Objekte behalten, die Sie
// an das Subject weitergeben möchten.
// Dieses Beispiel entfernt alle Daten und fügt nur die neuen
// Informationen wieder hinzu.
try
{
subject.getPublicCredentials().clear();
subject.getPrivateCredentials().clear();
subject.getPrincipals().clear();
}
catch (Exception e)
{
throw new WSLoginFailedException (e.getMessage(), e);
}
// Fügt alle Daten aus dem basic_auth_subject dem Subject für die Anmeldung hinzu.
// Damit ist die Zuordnung des neuen Benutzers abgeschlossen.
try
{
subject.getPublicCredentials().addAll(basic_auth_subject.
getPublicCredentials());
subject.getPrivateCredentials().addAll(basic_auth_subject.
getPrivateCredentials());
subject.getPrincipals().addAll(basic_auth_subject.
getPrincipals());
}
catch (Exception e)
{
throw new WSLoginFailedException (e.getMessage(), e);
}
return null;
}
});
}
catch (PrivilegedActionException e)
{
throw new WSLoginFailedException (e.getException().getMessage(),
e.getException());
}
}
}
// Variablen für das Anmeldemodul definieren
com.ibm.wsspi.security.csiv2.CSIv2PerformPolicy csiv2PerformPolicy = null;
javax.security.auth.Subject basic_auth_subject = null;
}