import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Toolkit;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.naming.ldap.LdapContext;
import javax.swing.*;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
import javax.naming.ldap.InitialLdapContext;
import javax.naming.ldap.LdapContext;
import java.io.*;
import java.util.ArrayList;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
public class ActiveDirectorySearchExample {
//Der Vollqualifizierte Name des Administrators im AD
final static String ADMIN_NAME = "[B]hier steht sonst was anderes[/B]";
final static String ADMIN_PASSWORD = "[B]hier steht sonst was anderes[/B]";
//User Standardpfad von dem die Suche im AD ausgehen soll
final static String SEARCH_BASE = "[B]hier steht sonst was anderes[/B]";
static LdapContext ctx;
/**
* @param args
* @param trimSubLdapHandy
*/
public static void main(String[] args) throws Exception {
init();
List list = findUsersByAccountName("");
for (Iterator iter = list.iterator(); iter.hasNext();) {
String element = (String) iter.next();
//System.out.println(element); //Ausgabe der LDAP Werte
//Ermittelung Name
//festlegen der Suchparameter
String ldapUserStart = "CN=";
String ldapUserEnd ="OU=";
//bestimmung des Anfangs und End-Indexes
int ldapUser1 = element.indexOf(ldapUserStart);
int ldapUser2 = element.indexOf(ldapUserEnd);
//erzeugung der Sub-Strings
//String subLdapUser = element.replace("CN=","").replace("OU=", "").replace("\\", "");
String subLdapUser = element.substring(ldapUser1+3, ldapUser2-1).replace("\\", "");
//Ermittelung Telefonnumer
//festlegen der Suchparameter
String ldapTelefonStart = "+";
String ldapTelefonEnd =", mobile=mobile: ";
//bestimmung des Anfangs und End-Indexes
int ldapTelefon1 = element.indexOf(ldapTelefonStart);
int ldapTelefon2 = element.indexOf(ldapTelefonEnd);
//erzeugung der Sub-Strings
if(ldapTelefon2 <= 0){
ldapTelefonEnd =", givenname=givenName: ";
ldapTelefon2 = element.indexOf(ldapTelefonEnd);
if(ldapTelefon2 <0){
ldapTelefon2 = 1;
ldapTelefon1 = 1;
}
}
else{
}
String subLdapTelefon = element.substring(ldapTelefon1, ldapTelefon2);
//Ermittelung Handynummer
//festlegen der Suchparameter
String ldapHandyStart = "mobile: ";
String ldapHandyEnd =", givenname=givenName: ";
//bestimmung des Anfangs und End-Indexes
int ldapHandy1 = element.indexOf(ldapHandyStart);
int ldapHandy2 = element.indexOf(ldapHandyEnd);
//erzeugung der Sub-Strings
if(ldapHandy2 <= 0 || ldapHandy1 <= 0){
ldapHandy2 = 1;
ldapHandy1 = 1;
}else{
}
String subLdapHandy = element.substring(ldapHandy1, ldapHandy2).replace("mobile: ", "");
//Ausgabe
System.out.println("Name: "+subLdapUser +"\t\t Telefon: "+subLdapTelefon +"\t Handy: "+subLdapHandy);
}
ctx.close();
}
/**
* Wir initialisieren die Verbindung zum LDAP Service
* Die zum Zugriff notwendigen Daten legen wir in einer
* Hashtable ab und übergeben diese an den InitialLdapContext, der
* mit den darin enthaltenen Informationen die Verbindung aufbaut.
* @return
* @throws Exception
*/
static void init() throws Exception {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, ADMIN_NAME);
env.put(Context.SECURITY_CREDENTIALS, ADMIN_PASSWORD);
//Der entsprechende Domänen-Controller
env.put(Context.PROVIDER_URL, "[B]hier steht sonst was anderes[/B]");
ctx = new InitialLdapContext(env, null);
}
//Suchfilter
static List findUsersByAccountName(String accountName) throws Exception{
List list = new ArrayList();
//Die ersten beiden Zeichen sind Präfix des Nachnamens (sn)
//String snPrefix = accountName.substring(0, 2) + "*";
//Das letze Zeichen ist Präfix des Vornamens (givenName)
//String givenNamePrefix = accountName.substring(2) + "*";
//Unsere LDAP Abfrage...
//String searchFilter = "(&(objectClass=user)(sn=" + snPrefix
// + ")(givenName=" + givenNamePrefix + "))";
String searchFilter ="objectClass=user";
//System.out.println(searchFilter);
//Wir definieren den "Suchapparat" für die LDAP Suche...
SearchControls searchControls = new SearchControls();
String[] resultAttributes = { "sn", "givenName", "sAMAccountName", "TelephoneNumber", "Mobile" };
searchControls.setReturningAttributes(resultAttributes);
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
//Wir führen die Suche im LDAP durch
NamingEnumeration results = ctx.search(SEARCH_BASE, searchFilter,
searchControls);
//Wir iterieren über alle Resultate und speichern die gefundenen Namen
//in einer Liste.
while(results.hasMoreElements()){
SearchResult searchResult = (SearchResult)results.nextElement();
list.add(searchResult.toString());
}
return list;
}
}