Beispiel: Mit der WSLogin-Konfiguration ein Subject für die Basisauthentifizierung erstellen
Dieses Beispiel veranschaulicht, wie Sie die WSLogin-Anwendungsanmeldekonfiguration in einer J2EE-Anwendung (Java™ 2 Platform, Enterprise Edition) verwenden, um sich anzumelden und ein Subject-Objekt abzurufen, das die Benutzer-ID und das Kennwort des Zielrealms enthält.
javax.security.auth.Subject subject = null;
try
{
// Mit der Anmeldekonfiguration WSLogin einen Anmeldekontext erstellen und eine
// Benutzer-ID, einen Zielrealm und ein Kennwort angeben. Anmerkung: Wenn
// target_realm_name mit dem aktuellen Realm identisch ist, wird ein
// authentifiziertes Subject erstellt. Sollten sich target_realm_name und
// aktueller Realm unterscheiden, wird ein nicht validiertes Subject für
// die Basisauthentifizierung erstellt. Dieses nicht validierte Subject
// wird erstellt, damit Sie eine Anforderung an einen anderen Zielrealm
// mit gültigen Sicherheitsnachweisen für diesen Realm senden können.
javax.security.auth.login.LoginContext ctx = new LoginContext("WSLogin",
new WSCallbackHandlerImpl("userid", "target_realm_name", "password"));
// Anmerkung: Im folgenden Code wird eine Alternative vorgestellt, die die Benutzer-ID
// und das Kennwort für den Zielrealm validiert. Es wird ein ferner Aufruf an
// den Zielserver abgesetzt, der true zurückgibt, wenn Benutzer-ID und Kennwort
// gültig sind, und false zurückgibt, wenn Benutzer-ID und Kennwort ungültig sind.
// Sollte false zurückgegeben werden, wird eine Ausnahme des Typs
// WSLoginFailedException ausgelöst. Sie können diese Ausnahme abfangen und
// die Anforderung wiederholen oder die weitere Verarbeitung der Anforderung,
// indem Sie zulassen, dass die Ausnahme ausgegeben wird.
// Alternativer Anmeldekontext, der die Benutzer-ID und das Kennwort
// für den Zielrealm validiert
/**** derzeit auf Kommentar gesetzt ****
java.util.Map appContext = new java.util.HashMap();
appContext.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,
"com.ibm.websphere.naming.WsnInitialContextFactory");
appContext.put(javax.naming.Context.PROVIDER_URL,
"corbaloc:iiop:target_host:2809");
javax.security.auth.login.LoginContext ctx = new LoginContext("WSLogin",
new WSCallbackHandlerImpl("userid", "target_realm_name", "password", appContext));
**** derzeit auf Kommentar gesetzt ****/
// Startet die Anmeldung
ctx.login();
// Subject aus dem Kontext abrufen
subject = ctx.getSubject();
}
catch (javax.security.auth.login.LoginException e)
{
throw new com.ibm.websphere.security.auth.WSLoginFailedException (e.getMessage(), e);
}
if (subject != null) {
// Berechtigte Aktion definieren, die die ferne Anforderung kapselt
java.security.PrivilegedAction myAction = java.security.PrivilegedAction()
{
public Object run()
{
// Annehmen, dass bereits ein Proxy definiert ist. Diese Beispielmethode
// gibt eine Zeichenfolge zurück.
return proxy.remoteRequest();
}
});
// Startet die Aktion mit dem Subject für die Basisauthentifizierung, das für
// die Sicherheitsanforderungen des Zielrealm benötigt wird.
String myResult = (String) com.ibm.websphere.security.auth.WSSubject.doAs
(subject, myAction);
}