Exemple : Utilisation de la configuration WSLogin pour créer un sujet d'authentification de base
Cet exemple décrit comment utiliser la configuration de connexion d'application WSLogin à partir d'une application Java™ 2 Platform, Enterprise Edition (J2EE) pour se connecter et obtenir un sujet contenant l'ID utilisateur et le mot de passe du domaine cible.
javax.security.auth.Subject subject = null;
try
{
// Créez un contexte de connexion à l'aide de la configuration de connexion WSLogin
// et indiquez un ID utilisateur, un domaine cible et un mot de passe. Remarque : Si
// le nom_domaine_cible est identique au domaine en cours, un sujet authentifié est créé. // Toutefois, si le
nom_domaine_cible est différent du domaine en cours, un sujet
// d'authentification est créé sans être validé. Ce sujet non validé et créé pour vous
// permettre d'envoyer une demande à une cible différente
avec des justificatifs de
javax.security.auth.login.LoginContext ctx = new LoginContext("WSLogin",
// new WSCallbackHandlerImpl("ID_utilisateur", "nom_domaine_cible", "mot_de_passe"));
// Remarque : Le code suivant offre une alternative qui valide l'ID utilisateur
// et le mot de passe spécifiés sur le domaine cible. Le code effectue un appel distant
// du serveur cible et renvoie la valeur true si l'ID utilisateur et le mot de passe
// sont corrects, et la valeur false s'ils ne le sont pas. Si la valeur false est
// renvoyée, une exception WSLoginFailedException est générée. Vous pouvez intercepter
// cette exception et effectuer une nouvelle tentative ou arrêter le flux de la
// demande en permettant la génération de cette exception.
// CONTEXTE DE CONNEXION ALTERNATIF QUI VALIDE L'ID UTILISATEUR ET LE MOT DE PASSE SUR LE
// DOMAINE CIBLE
/**** actuellement placé en commentaire ****
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", "nom_domaine_cible", "password", appContext));
**** actuellement placé en commentaire ****/
// Démarre la connexion
ctx.login();
// Extrait le sujet du contexte
subject = ctx.getSubject();
}
catch (javax.security.auth.login.LoginException e)
{
throw new com.ibm.websphere.security.auth.WSLoginFailedException (e.getMessage(), e);
}
if (subject != null) {
// Définit une action privilégiée qui encapsule votre demande distante.
java.security.PrivilegedAction monAction = java.security.PrivilegedAction()
{
public Object run()
{
// Suppose qu'un proxy est déjà défini. Cet exemple de méthode renvoie une chaîne
return proxy.remoteRequest();
}
});
// Démarre cette action à l'aide du sujet d'authentification standard requis
// par la sécurité du domaine cible.
String myResult = (String) com.ibm.websphere.security.auth.WSSubject.doAs (subject, monAction);
}