Les méthodes communes, les étapes prérequises et les autres informations requises pour les programmeurs qui développent des applications virtual member manager sont décrites ici.
Avant d'intégrer les fonctions de virtual member manager dans votre application, vous devez importer les packages de virtual member manager ainsi que les packages associés. L'exemple ci-après montre les packages que vous devez importer et la manière de définir la classe.
import java.util.Hashtable;
import java.util.List;
import com.ibm.websphere.wim.SchemaConstants;
import com.ibm.websphere.wim.Service;
import com.ibm.websphere.wim.client.LocalServiceProvider;
import com.ibm.websphere.wim.ras.WIMTraceHelper;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import javax.security.auth.Subject;
import javax.security.auth.login.LoginContext;
import com.ibm.websphere.security.auth.WSSubject;
import com.ibm.websphere.security.auth.callback.WSCallbackHandlerImpl;
import commonj.sdo.DataObject;
Vous pouvez extraire le service virtual member manager à partir de l'EJB éloigné ou de la machine JVM locale si votre application est exécutée dans WebSphere Application Server.
L'exemple d'application de base ci-après contient les méthodes locateService() qui indiquent comment obtenir le service virtual member manager, ainsi que d'autres méthodes communes utilisées dans les exemples de code des diverses opérations virtual member manager. Remplacez les variables en italiques dans le code ci-après par les valeurs réelles dont vous avez besoin.
/**
* Il s'agit d'une application de base qui définit les méthodes communes
* utilisées par d'autres exemples de code.
**/
public class BaseApp implements SchemaConstants
{
/**
* Déclaration des variables communes : mise à jour en fonction de l'environnement
**/
static final String HOST = "localhost"; // nom d'hôte de WebSphere Application Server
static final String BOOTSTRAP_PORT = "2809"; // numéro de port d'amorçage/RMI
// Service Virtual member manager utilisé pour effectuer des appels d'API
static Service service = null;
/**
* Recherche le service virtual member manager à l'aide d'un EJB éloigné
* @param ejbJndiName Nom JNDI de l'EJB.
* Le nom d'EJB par défaut est "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome"
**/
public static Service locateService(String ejbJndiName)
{
try {
// Accès distant aux services virtual member manager par Enterprise JavaBeans
Environnement table de hachage = nouvelle table de hachage Hashtable();
String providerURL = "corbaloc:iiop:" + HOST + ":" + BOOTSTRAP_PORT;
environment.put(LocalServiceProvider.PROVIDER_URL, providerURL);
if (ejbJndiName == null) {
ejbJndiName = "ejb/com/ibm/websphere/wim/ejb/WIMServiceHome";
}
environment.put(LocalServiceProvider.EJB_JNDI_NAME, ejbJndiName);
service = new LocalServiceProvider(environment);
}
catch (Exception e) {
e.printStackTrace();
}
return service;
}
/**
* Recherche le service virtual member manager sur la machine virtuelle Java locale
**/
public static Service locateService()
{
try {
// Accès local aux services virtual member manager
return new LocalServiceProvider(null);
}
catch(Exception e)
{
e.printStackTrace();
}
return null;
}
/**
* Exécute l'action en tant qu'utilisateur spécifié
* @param user nom d'utilisateur
* @param password mot de passe de l'utilisateur
* @param action Action à appeler une fois l'utilisateur connecté
* @return Objet renvoyé par l'action
**/
public static Object runAsUser(String user, String password, PrivilegedExceptionAction action) throws Exception
{
LoginContext loginContext;
Subject subject;
// Connexion à l'aide de l'ID utilisateur et du mot de passe transmis, qui possèdent le rôle requis
loginContext = new LoginContext("WSLogin", new WSCallbackHandlerImpl(user, "", password));
loginContext.login();
subject = loginContext.getSubject();
try {
return WSSubject.doAs(subject, action);
}
catch (PrivilegedActionException excp) {
throw (Exception) excp.getCause();
}
}
public static String printDO(DataObject obj)
{
return WIMTraceHelper.printDataObject(obj);
}
/**
* Boucle via les entités de l'objet de données et impression de son nom unique
* @param root Objet de données en entrée
*/
@SuppressWarnings("unchecked")
public static void printIdentifiers(DataObject root) throws Exception
{
// Extraction de toutes les entités de l'objet de données
List entities = root.getList(SchemaConstants.DO_ENTITIES);
for (int i = 0; i < entities.size(); i++) {
DataObject ent = (DataObject) entities.get(i);
// Extraction de l'identificateur d'entité
DataObject id = ent.getDataObject(SchemaConstants.DO_IDENTIFIER);
if (id != null) {
String uniqueName = id.getString(SchemaConstants.PROP_UNIQUE_NAME);
System.out.println("UniqueName is -> " +uniqueName);
}
else {
System.out.println("Missing Identifier");
}
}
}
}
org.eclipse.emf.ecore.EPackage.Registry.INSTANCE=com.ibm.ws.wim.util.VMMEMFGlobalDelegatorRegistry
Si
vous ne définissez pas cette propriété système, l'implémentation EMF par défaut est
appliquée, mais cette dernière ne prend pas en charge les environnements à plusieurs
domaines de sécurité et peut endommager le schéma EMF, ce qui risque de donner lieu à une
erreur de violation de schéma.Les exemples de code des diverses opérations virtual member manager utilisent les méthodes définies dans la classe BaseApp. Voir les exemples de code pour obtenir des instructions sur la manière d'effectuer des appels d'API.
Pour appeler les API de virtual member manager dans votre code d'application, vous devez disposer de l'un des rôles suivants :
Rôle administrateur de WebSphere Application Server.
Rôle virtual member manager affecté à l'aide des droits de gestion des référentiels fédérés.
Pour plus d'informations sur les rôles prédéfinis de virtual member manager, voir la section Mappage d'utilisateurs et de groupes à des rôles pour affecter les droits de gestion du référentiel fédéré dans Assurance d'une sécurité.
Pour plus d'informations sur la manière d'affecter des utilisateurs ou des groupes aux rôles de virtual member manager prédéfinis, reportez-vous aux commandes mapIdMgrUserToRole, mapIdMgrGroupToRole, removeIdMgrUsersFromRole, removeIdMgrGroupsFromRole, listIdMgrUsersForRoles et listIdMgrGroupsForRoles, dans la rubrique Groupe de commandes IdMgrConfig pour l'objet AdminTask dans le centre de documentation de WebSphere Application Server.
Pour un scénario complet, voir la rubrique Exemple de code pour l'utilisation des droits de gestion des référentiels fédérés.
Vérifiez votre paramètre de chemin de classe pour vous assurer qu'il inclut les fichiers JAR appropriés pour compiler le code.
Si le code d'application est exécuté dans WebSphere Application Server comme application ou servlet, le paramètre Subject et les autres paramètres d'accès aux API de virtual member manager sont utilisés implicitement et sont identiques à ceux du serveur ou du processus sur lequel l'application est déployée.
Si l'application est exécutée en dehors de WebSphere Application Server (par exemple, à partir d'un client WebSphere Application Server), utilisez les arguments JVM ci-après lors de l'exécution de votre code compilé. Remplacez les variables en italiques dans les arguments ci-après par les valeurs réelles dont vous avez besoin.
-Djava.security.auth.login.config=<WAS_HOME>/properties/wsjaas_client.conf
-Dcom.ibm.CORBA.ConfigURL=<URL_WAS_HOME>/properties/sas.client.props
-Dcom.ibm.SSL.ConfigURL=<URL_WAS_HOME>/properties/ssl.client.props
N'utilisez les arguments suivants que si vous devez remplacer les données d'identification spécifiées dans le fichier de propriétés CORBA :
-Dcom.ibm.CORBA.loginSource=properties
-Dcom.ibm.CORBA.loginUserid=IDAdmin
-Dcom.ibm.CORBA.loginPassword=Mot_de_passe_Admin
-Djava.security.auth.login.config=C:/Progra~1/IBM/WebSphere/AppClient/properties/wsjaas_client.conf
-Dcom.ibm.CORBA.ConfigURL=file:/Progra~1/IBM/WebSphere/AppClient/properties/sas.client.props
-Dcom.ibm.SSL.ConfigURL=file:/Progra~1/IBM/WebSphere/AppClient/properties/ssl.client.props
-Dcom.ibm.CORBA.loginSource=properties
-Dcom.ibm.CORBA.loginUserid=admin
-Dcom.ibm.CORBA.loginPassword=admin