Para realizar una autenticacion a un LDAP (Lightweight Directory Access Protocol), (Protocolo Ligero de Acceso a Directorios) realice el siguiente código:
Creación de una clase:
package com.ldap;
/**
* @author omeza
*/
import java.util.Hashtable;
import javax.naming.AuthenticationException;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class ldap {
private String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory";
private String my_host = null;
private Consulta consulta = null;
private String ldapUrl; // para identificar el url del ldap
private String ldapDominio; // es un prefijo al usuario ej. "uid="
private String ldapFiltro; // es la rama del ldap ej. "ou=" o "cn="
private String ldapEstado;
public ldap() {
consulta = new Consulta();
}
/**
* Autentica usuario
* @param user
* @param pass
* @param domain
* @param url
* @param filtro
* @return
*/
public String Authenticate(String user, String pass,String domain,String url,String filtro) {
Hashtable env = new Hashtable();
if (pass.compareTo("") == 0 || user.compareTo("") == 0)
return null;
my_host=url;
env.put(Context.INITIAL_CONTEXT_FACTORY,INITCTX);
env.put(Context.PROVIDER_URL, my_host);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL,new String(domain+user+filtro)); // aqui envia la autenticacion con el servidor ldap
env.put(Context.SECURITY_CREDENTIALS,new String(pass));
try {
DirContext ctx = new InitialDirContext(env);
System.out.println(""+ctx.toString());
}catch (AuthenticationException e) {
System.out.println("Authenticate error!!!!!!!");
return null;
}catch (NamingException e) {
e.printStackTrace();
return null;
}
return user;
}
/**
* Metodo principal de autenticacion LDAP
* @param user
* @param pass
Filtro * @param domain
* @param url
* @param filtro
*/
public void main(String user, String pass,String domain,String url,String filtro) {
ldap Aut = new ldap();
filtro=","+filtro;
if (Aut.Authenticate(user,pass,domain,url,filtro)!=null){
System.out.println("AUTENTICADO");
ldapEstado="AUTENTICADO";
}else{
System.out.println("NO AUTENTICADO");
ldapEstado="NO AUTENTICADO";
}
}
/**
* @return Returns the ldapDominio.
*/
public String getLdapDominio() {
return ldapDominio;
}
/**
* @param ldapDominio The ldapDominio to set.
*/
public void setLdapDominio(String ldapDominio) {
this.ldapDominio = ldapDominio;
}
/**
* @return Returns the ldapFiltro.
*/
public String getLdapFiltro() {
return ldapFiltro;
}
/**
* @param ldapFiltro The ldapFiltro to set.
*/
public void setLdapFiltro(String ldapFiltro) {
this.ldapFiltro = ldapFiltro;
}
/**
* @return Returns the ldapUrl.
*/
public String getLdapUrl() {
return ldapUrl;
}
/**
* @param ldapUrl The ldapUrl to set.
*/
public void setLdapUrl(String ldapUrl) {
this.ldapUrl = ldapUrl;
}
/**
* @return Returns the ldapEstado.
*/
public String getLdapEstado() {
return ldapEstado;
}
/**
* @param ldapEstado The ldapEstado to set.
*/
public void setLdapEstado(String ldapEstado) {
this.ldapEstado = ldapEstado;
}
}
Tambien podes llamar a la funcion desde otra clase tiene que tener la siguiente sintaxis:
com.ldap.main(usr,pass,Dominio,Url,Filtro);
en el caso de un jsp:
instanciar la clase:
<jsp:useBean class="com.ldap" scope="session"
id="beanLDAP" type="com.ldap">
</jsp:useBean>
y luego llamar:
beanLDAP.main(usr,pass,Dominio,Url,Filtro);