Exemple : Module de connexion de jeton de propagation personnalisé
Cet exemple explique comment savoir si la connexion est une connexion initiale ou par propagation.
public customLoginModule()
{
public void initialize(Subject subject, CallbackHandler callbackHandler,
Map sharedState, Map options)
{
// (Pour plus d'informations sur les actions à effectuer pendant l'initialisation, voir
// Développement de modules de connexion personnalisés pour une configuration de connexion système pour JAAS.)
}
public boolean login() throws LoginException
{
// (Pour plus d'informations sur les actions à effectuer pendant la connexion, voir
// Développement de modules de connexion personnalisés pour une configuration de connexion système pour JAAS.)
// Gère le WSTokenHolderCallback pour savoir s'il s'agit d'une connexion initiale
// ou par propagation.
Callback callbacks[] = new Callback[1];
callbacks[0] = new WSTokenHolderCallback("Liste de jetons d'autorisation : ");
try
{
callbackHandler.handle(callbacks);
}
catch (Exception e)
{
// gérer l'exception
}
// Reçoit la liste de tableaux des objets TokenHolder (les jetons sérialisés)
List authzTokenList = ((WSTokenHolderCallback) callbacks[0]).getTokenHolderList();
if (authzTokenList != null)
{
// Lance une itération dans la liste à la recherche de votre jeton personnalisé
for (int i = 0; i< authzTokenList.size(); i++)
{
TokenHolder tokenHolder = (TokenHolder)authzTokenList.get(i);
// Recherche le nom et la version de votre implémentation de jeton de propagation
if (tokenHolder.getName().equals("
com.ibm.websphere.security.token.CustomPropagationTokenImpl") &&
tokenHolder.getVersion() == 1)
{
// Transmet les octets dans votre constructeur PropagationToken personnalisé
// à désérialiser
customPropToken = new
com.ibm.websphere.security.token.CustomPropagationTokenImpl(tokenHolder.
getBytes());
}
}
}
else // Il ne s'agit pas d'une connexion par propagation. Créez une nouvelle instance de
// votre implémentation PropagationToken
{
// Ajoute un nouveau jeton de propagation personnalisé. Il s'agit d'une connexion initiale
customPropToken = new com.ibm.websphere.security.token.CustomPropagationTokenImpl();
// Ajoute tous les attributs initiaux
if (customPropToken != null)
{
customPropToken.addAttribute("clé1", "valeur1");
customPropToken.addAttribute("clé1", "valeur2");
customPropToken.addAttribute("clé2", "valeur1");
customPropToken.addAttribute("clé3", "autre chose");
}
}
// Remarque : Vous pouvez ajouter le jeton à l'unité d'exécution pendant la validation au cas
// où quelque chose se passe pendant la connexion.
}
public boolean commit() throws LoginException
{
// Pour plus d'informations sur les actions à effectuer pendant la validation, voir
// Développement de modules de connexion personnalisés pour une configuration de connexion système pour JAAS.
if (customPropToken != null)
{
// Définit le jeton de propagation sur l'unité d'exécution
try
{
System.out.println(tc, "*** AJOUTE MON JETON DE PROPAGATION PERSONNALISE A L'UNITE D'EXECUTION ***");
// Imprime les valeurs dans le jeton de propagation désérialisé
java.util.Enumeration keys = customPropToken.getAttributeNames();
while (keys.hasMoreElements())
{
String key = (String) keys.nextElement();
String[] list = (String[]) customPropToken.getAttributes(key);
for (int k=0; k<list.length; k++)
System.out.println("Clé/Valeur : " + key + "/" + list[k]);
}
// Ceci le définit sur l'unité d'exécution en utilisant getName() + getVersion() comme clé
com.ibm.wsspi.security.token.WSSecurityPropagationHelper.addPropagationToken(
customPropToken);
}
catch (Exception e)
{
// Gère l'exception
}
// A présent, vous pouvez vérifier si vous l'avez défini correctement en essayant
// de le récupérer à partir de l'unité d'exécution et d'imprimer les valeurs.
try
{
// Ceci extrait le jeton de propagation de l'unité d'exécution avec les paramètres getName()
// et getVersion().
com.ibm.wsspi.security.token.PropagationToken tempPropagationToken =
com.ibm.wsspi.security.token.WSSecurityPropagationHelper.getPropagationToken
("com.ibm.websphere.security.token.CustomPropagationTokenImpl", 1);
if (tempPropagationToken != null)
{
System.out.println(tc, "*** A RECU MON JETON DE PROPAGATION PERSONNALISE
DE L'UNITE D'EXECUTION ***");
// Imprime les valeurs dans le jeton de propagation désérialisé
java.util.Enumeration keys = tempPropagationToken.getAttributeNames();
while (keys.hasMoreElements())
{
String key = (String) keys.nextElement();
String[] list = (String[]) tempPropagationToken.getAttributes(key);
for (int k=0; k<list.length; k++)
System.out.println("Clé/Valeur : " + key + "/" + list[k]);
}
}
}
catch (Exception e)
{
// Gère l'exception
}
}
}
// Définit vos variables de module de connexion
com.ibm.wsspi.security.token.PropagationToken customPropToken = null;
}