2. Utilizar el acceso que se tiene para validar el usuario/password (Ldap hace eso)
3. Trabajar con ese usuario
Código (java)
import java.util.Hashtable;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
public class LdapTest {
public static boolean validateUser(
InitialLdapContext ctx, String user, String password) {
DirContext dirContext = null;
try {
Hashtable environment = (Hashtable) ctx.getEnvironment().clone();
environment.put(Context.SECURITY_PRINCIPAL, user);
environment.put(Context.SECURITY_CREDENTIALS, password);
// Define el contexto del usuario
dirContext = new InitialDirContext(environment);
System.out.println("Ahhhh HUEVO KBN!!");
} catch (NamingException e) {
System.out.println(e.getMessage());
return false;
}
return true;
}
public static void processRequest(InitialLdapContext ctx, String userContext, String filter, String attribute) {
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
NamingEnumeration<SearchResult> searchResults;
try {
searchResults = ctx.search(userContext, filter, searchControls);
while (searchResults.hasMoreElements()) {
SearchResult sr = searchResults.next();
Attributes attributes = sr.getAttributes();
Attribute a = attributes.get(attribute);
if (a != null) {
String attrValue = (a.get().toString());
System.out.println(attrValue);
} else {
System.out.println("Dato no existe");
}
}
} catch (NamingException e) {
e.printStackTrace();
}
}
private static InitialLdapContext initialiaseLdapContext(String server, int port, String manager, String password) {
boolean initialised = false;
Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
properties.put(Context.PROVIDER_URL, "ldap://" + server + ":"+ port);
properties.put(Context.SECURITY_AUTHENTICATION, "simple");
properties.put(Context.SECURITY_PRINCIPAL, manager);
properties.put(Context.SECURITY_CREDENTIALS, password);
InitialLdapContext ctx = null;
try {
// Create initial context
ctx = new InitialLdapContext(properties, null);
initialised = true;
} catch (NamingException e) {
initialised = false;
} finally {
if (initialised) {
System.out.println("Buen acceso");
} else {
System.out.println("Falla en acceso");
}
}
return ctx;
}
//TODO cambiar todo lo que hay entre <! .. >
public static void main(String[] args) {
String url = "<!local>"; // url de tu ldap
int port = 389; // puerto más común, pero puede ser cualquiera
String manager = "<!administrador de ldap>";
String managerPassword = "<!password de administrador>";
String user = "<!usuario a probar>";
String domain = "@<!dominio del usuario>";
String password = "<!password del usuario a probar";
String userContext = "dc=<contextoA>, dc=<contextoB>";
InitialLdapContext ctx = null;
try {
ctx = initialiaseLdapContext(url, port, manager, managerPassword);
if (ctx != null) {
// valida el acceso de tu usuario
if (validateUser(ctx,user+domain,password)) {
// url de tu ldap
processRequest(ctx, userContext, "(<!parámetro LDAP con el que se reconoce el usuario>="+user+")", "<!cualquier parámetro del LDAP que se desea obtener>");
/* se trabaja con el usuario
* se trabaja con el usuario
* se trabaja con el usuario */
} else {
System.out.println("No se reconoce usuario/password");
}
ctx.close();
}
} catch (NamingException e) {
e.printStackTrace();
}
}
}
Comentarios
Publicar un comentario