Synchronisation des DBMember via le LDAP

actu wisen test03

Cet article explique comment implémenter un script permettant de synchroniser des DBMember avec un LDAP et de disposer des différentes options associées à l'utilisation de la synchronisation LDAP dans le menu contextuel d'un DBMember, à savoir :

  • Activer la synchronisation LDAP du DBMember
  • Synchroniser le DBMember avec le LDAP
  • Détacher le DBMember du LDAP
  • Date de la dernière synchronisation du DBMember avec le LDAP
  • Les explications ci-dessous sont basées sur la version 9.0.3 de jPlatform.

 

Attention, cette méthode n'est pas entièrement conforme aux bonnes pratiques de Jalios. L'opération étant de plus délicate, il faut être vigilant aux effets de bord éventuels.

 

Modification de la classe native DBMember

L'objet DBMember hérite de l'objet Member. De ce fait il dispose de la variable ldapSync (réprésente le champ Sync. LDAP d'un membre) et de la variable LastLdapSynchro (représente le champ Date de dernière synchronisation). Néanmoins, ces valeurs ne sont pas persistées. Pour qu'elles le soient, une modification de la classe DBMember ainsi que du fichier DBMember.hbm.xml est nécessaire.

Pour information, la classe et le fichier HBM se situe dans le JAR jcms.jar dans le package com.jalios.jcms.dbmember.

 

Etapes de modification

Dans votre environnement, créer le package com.jalios.jcms.dbmember.

Dans la classe DBMember :

  1. Créer les Getter / Setter
    • public boolean isLdapAccount() {return Util.notEmpty(this.lastLdapSynchro);}
    • public Date getLastLdapSynchro() {return this.lastLdapSynchro;}
    • public void setLastLdapSynchro(Date paramDate) {this.lastLdapSynchro = paramDate;}
    • public boolean getLdapSync() {return this.ldapSync;}
    • public void setLdapSync(boolean paramBoolean) {this.ldapSync = paramBoolean;}
  2.  Dans le constructeur public DBMember(Member paramMember), Setter les nouvelles valeurs
    • setLdapSync(paramMember.getLdapSync());
    • setLastLdapSynchro(paramMember.getLastLdapSynchro());
  3. Dans la classe public static final class Fields(), déclarer 2 constantes qui contiennent le nom des nouvelles colonnes qui seront déclarées dans le fichier HBM
    • public static final String LDAPSYNC_COLUMN = "ldapSync";
    • public static final String LASTLDAPSYNCHRO_COLUMN = "lastLdapSynchro";

Dans le fichier DBMember.hbm.xml :

  1. Insérer les lignes ci-dessous à la fin du fichier
    • <property name="ldapSync"><column name="ldapSync" not-null="true" default="0" /></property>
    • <property name="lastLdapSynchro" />
Attention : la déclaration ldapSync crée une colonne de type primitif (boolean) qui ne peut donc pas être à NULL. Si des DBMembres existent dans votre base de données, pensez à exécuter une requête SQL afin d'ajouter une valeur par défaut (0 ou false) à cette colonne.

 

Modification de la classe LdapAuthenticationHandler

Cette modification permet lors de la synchronisation avec un LDAP, de créer, modifier des DBMembres ou de modifier des Membres s'ils existent déjà.

Pour information, les sources de la classe sont dans le package custom.

 

Etapes de modification

  1. Dans la méthode public static Member synchronizeAccount() dans le bloc de mise à jour du membre
    • Vérifier si le membre est une instance de Member ou de DBMember afin de caster le retour de la méthode member.getUpdateInstance()
      • boolean isDBMember = member instanceof DBMember;
      • Member updated;
      • if (isDBMember)
      • updated = (DBMember) member.getUpdateInstance();
      • else
      • updated = (Member) member.getUpdateInstance();
  2.  Dans la méthode public static Member updateOrCreateAccount()
    • Dans le bloc de création du membre, remplacer member = new Member(); par member = new DBMember();
    • Dans le bloc de mise à jour du membre, vérifier si le membre est une instance de Member ou de DBMember afin de caster le retour de la méthode member.getUpdateInstance() comme dans l'étape 1

 

Création d'un DBMemberCtxMenuPolicyFilter

 Cette classe permet d'ajouter les fonctionnalités ci-dessous au menu contextuel des DBMembres

  • Activer la synchronisation LDAP
  • Synchroniser avec le LDAP
  • Détacher du LDAP

Vous pouvez télécharger cette classe ici.

Le lien Activer la synchronisation LDAP pointe sur une JSP que vous devrez créer. Elle permet de charger le Handler permettant d'activer la synchronisation.

 

Déclaration des classes de surcharge dans un module

Afin que les surcharges apportées à DBMember et LdapAuthenticationHandler soient prises en compte, il ne faut pas qu'elles soient empaquetées dans un *.jar. Pour cela, déclarez les fichiers en tant que webapp-files en ajoutant "/" au début du chemin :

<webapp-files>

<file path="/WEB-INF/classes/custom/LdapAuthenticationHandler.class" />
<file path="/WEB-INF/classes/custom/LdapAuthenticationHandler.java" />
<!-- DBMember : Override jcms.jar 9.0.3 -->
<file path="/WEB-INF/classes/com/jalios/jcms/dbmember/DBMember.class" />
<file path="/WEB-INF/classes/com/jalios/jcms/dbmember/DBMember$Fields.class" />
<file path="/WEB-INF/classes/com/jalios/jcms/dbmember/DBMember.java" />
<file path="/WEB-INF/classes/com/jalios/jcms/dbmember/DBMember.hbm.xml" />

</webapp-files>

 

N'hésitez à revenir vers nous si vous avez des questions.

Bon développement à toutes et à tous !!!

 

L'équipe WISEN

Logo Wisen