Synchronisation des DBMember via le LDAP
03 mars 2017
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.
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 :
- 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;}
- Dans le constructeur public DBMember(Member paramMember), Setter les nouvelles valeurs
setLdapSync(paramMember.getLdapSync());
setLastLdapSynchro(paramMember.getLastLdapSynchro());
- 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 :
- 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" />
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
- 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();
- Dans la méthode public static Member updateOrCreateAccount()
- Dans le bloc de création du membre, remplacer
member = new Member();
parmember = 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