Authentification LDAP en java/Webservice -- 2ème partie
Posté par Clem
| lundi 23 novembre 2009 à 11:01 | rss

Aujourd'hui je vais adapter ce code pour créer un Webservice avec axis2 qui va se connecter à OpenLDAP et me permettre de récupérer l'email d'un utilisateur.
Je crée d'abord une classe plus générique, contenant deux méthodes publiques getConnectionLDAP et getEmail :
package fr.quaquin.clement.ldap;
import java.util.Hashtable;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.naming.*;
import javax.naming.directory.*;
/*
* Classe permettant de vérifier que l'utilisateur a bien tapé
* son login/mot de passe contenu dans l'annuaire LDAP distant
*/
public class AuthenticateUserWS {
private String dn="dc=home,dc=com";
private String host="ldap://localhost:389/";
private DirContext ctx;
public String getConnectionLDAP(String login, String password){
Hashtable env = loadEnv(login,password);
if (connectionOk(env)) return "OK";
else return "KO";
}
public String getEmail(String login, String password){
Hashtable env = loadEnv(login,password);
String email="";
if (connectionOk(env)){
String attrID = "mail";
try {
email=applyRegexp(ctx.getAttributes("uid="+login+",ou=people",
new String[]{attrID}).get(attrID).toString());
} catch (NamingException e) {
e.printStackTrace();
}
}
return email;
}
private boolean connectionOk(Hashtable env) {
// Create the initial context
try {
ctx = new InitialDirContext(env);
return true;
} catch (NamingException e) {
e.printStackTrace();
return false;
}
}
/*
* Préparation du tableau de paramètres
* envoyés au contexte Directory.
*/
private Hashtable loadEnv(String login, String password) {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, host+dn);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "uid="+login+",ou=people,dc=home,dc=com");
env.put(Context.SECURITY_CREDENTIALS, password);
return env;
}
/*
* OpenLdap renvoie "mail= toto@titi.com" pour l'attribut mail
* J'utilise donc ici une expression régulière pour extraire
* l'email.
*/
private String applyRegexp(String rawTxt) {
String re1=".*?";
String re2="([\\w-+]+(?:\\.[\\w-+]+)*@(?:[\\w-]+\\.)+[a-zA-Z]{2,7})";
Pattern p = Pattern.compile(re1+re2,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher m = p.matcher(rawTxt);
if (m.find())
{
String email1=m.group(1);
return email1.toString();
}
else return null;
}
}
Télécharger également les plugins Axis2 Archive Wizard pour Eclipse qui vont nous servir à générer une archive .aar déployable sur le serveur axis (génération des classes compilées ainsi que le fichier service.xml)
Une fois que ces plugins sont installés, dans Eclipse sélectionner le menu "File - New - Other" puis l'item "Axis2 Wizards - Axis2 Service Archiver" et cliquer sur "next" (à propos des boutons "next", je vous renvoie à la note traitant du comportement d'Eclipse sous ubuntu 9.10).
Sélectionner le chemin contenant vos classes compilées puis "next".
Cocher "skip WSDL" puis "next" 2 fois.
Cocher "Generate the service xml automatically" puis "next".
Sélectionner les méthodes publiques uniquement.
Puis choisir le chemin des services axis pour créer l'archive finale, typiquement $TOMCAT_HOME/webapps/axis2/WEB-INF/services/
Le WebService est déployé, on peut le visualiser à cette adresse

En cliquant sur le titre du webservice, on obtient son fichier de définition wsdl qui permet la communication avec le webservice depuis différentes applications.
On peut déjà tester que le webservice fonctionne en tapant la méthode et ses paramètres dans l'URL :
http://localhost:8080/axis2/services/LdapAuthentService/getConnectionLDAP?login=cquaquin&password=titi
ou
http://localhost:8080/axis2/services/LdapAuthentService/getEmail?login=cquaquin&password=titi
Le xml généré contient les valeurs de retour que nous avons définies dans la classe java.
Références :
Axis2 Quick Start Guide
Howto Axis2 : Tutoriel sur l’utilisation des Web Services avec Axis2
Regular expression generator
Tutorial Axis2 : Réalisation du code métier serveur
axis , code
, eclipse
, java
, openldap
, tuto
, webservice
This work is licensed under a Creative Commons Attribution 3.0 Unported License
Commentaires
Aucun commentaire pour le moment.
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.