AD per LDAP anbinden über Java

Virot

Mitglied
Hallo,

ich beschäftige mich nun seit einigen Monaten mehr oder minder Erfolgreich mit Java.
Momentan habe ich mir überlegt eine kleine Anwendung zu schreiben die aus dem AD unserer Firma die Daten per LDAP zieht und anzeigt.
Leider habe ich weder über die SuFu noch über Google eine Lösung gefunden.
Ich habe zwar einige "fertige" Lösungen gefunden jedoch interessiert mich wie das ganze Funktioniert bzw. wie ich es so implementieren kann das es bei mir Funktioniert.

Also falls jemand eine Idee wonach ich suchen muss bzw. eine kleine Erklärung hat wäre ich dankbar 🙂!

Vielleicht gibt es ja schon fertige Module die man benutzen kann oder so.

ps.: Das ganze soll ein Telefonbuch werden.
Es sollen also Nur "Name, Telefonnummer, Mobile" angezeigt werden 🙂!

pps.: Ich hatte auf einer anderen Seite einen fertigen Code gefunden, diesen habe ich angepasst und es hat soweit funktioniert aber ich habe nicht alles verstanden.

lg
 
Dann poste doch deinen Funktionierenden Code und frage speziell nach, was du nicht verstehst.

Kann mir eher Vorstellen, dass deine Probleme LDAP und nicht Java entspringen.

Grüße,

Sorainthy
 
Hallo,

erst einmal vielen dank für deine Antwort Sorainthy.
Hier der Code(etwas unordentlich da ich viel Kommentiert habe was ich so verstanden habe).
Einige Sachen die ich dort über verschiedene IF-Anweisungen realisiert habe kann man auch über replace löse, die Möglichkeit habe ich aber erst später entdeckt darum sieht es etwas chaotisch aus.

Java:
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;
    }

	
  }


Ich verstehe generell nicht wie die Anbindung über LDAP bei JAVA läuft.
Mich wird interessieren was es für befehle gibt und wie man diese nutzen kann.
Ein kleines Tutorial wäre vielleicht auch nett, konnte aber leider nix gutes finden.

ps.: Ich habe aus Sicherheitsgründen die Daten der Firma entfernt. Aber da es Funktioniert geh ich mal davon aus das es nicht daran liegt.

lg
 

Neue Themen


Zurück
Oben