2016-09-18 2 views
1

В Linux Shell Я использую следующую команду, чтобы получить все различающиеся имена (DN) в LDAP:Как получить весь дп в моем ldapsearch в JAVA

ldapsearch -x -b "" -H URL -D uid=administrator,cn=admins,cn=city -w PASS |grep dn: 

Моей проблема: Как получить все DN-й в Java, как Я использовал эту команду?

+0

Вы читали о Java ** ProcessBuilder ** запускать эту команду непосредственно в JVM. Если это то, о чем вы просите. – GhostCat

+0

Спасибо, но я хочу другой путь !!! –

+0

Мне и мне хотелось бы, чтобы вы, новичок, поняли, что мы не ** вы **. Мы не можем знать, чего вы хотите, потому что вы не даете никаких подробностей об этой идее. – GhostCat

ответ

1

Вы можете использовать Java Naming and Directory Interface (JNDI).

Вот пример вдохновил из связанного учебника:

import javax.naming.*; 
import javax.naming.directory.*; 
import java.util.Hashtable; 

/** 
* Retrieves the DN from the search results 
*/ 
class FullName { 
    public static void printSearchEnumeration(NamingEnumeration retEnum) { 
    try { 
     while (retEnum.hasMore()) { 
     SearchResult sr = (SearchResult) retEnum.next(); 
     System.out.println(">>" + sr.getNameInNamespace()); 
     } 
    } 
    catch (NamingException e) { 
     e.printStackTrace(); 
    } 
    } 

    public static void main(String[] args) { 
    // Set up the environment for creating the initial context 
    Hashtable<String, Object> env = new Hashtable<String, Object>(11); 
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); 

    env.put(Context.PROVIDER_URL, "ldap://localhost:389"); 
    env.put(Context.SECURITY_AUTHENTICATION, "simple"); 
    env.put(Context.SECURITY_PRINCIPAL, "uid=administrator,cn=admins,cn=city"); 
    env.put(Context.SECURITY_CREDENTIALS, "PASS"); 

    // Perform search in the entire subtree. 
    SearchControls ctl = new SearchControls(); 
    ctl.setSearchScope(SearchControls.SUBTREE_SCOPE); 

    try { 
     // Create initial context 
     DirContext ctx = new InitialDirContext(env); 

     NamingEnumeration answer = ctx.search("", null, ctl); 

     // Print the answer 
     printSearchEnumeration(answer); 

     // Close the context when we're done 
     ctx.close(); 
    } 
    catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 
+0

Я уже использую этот код, и java даю мне эту ошибку: javax.naming.NameNotFoundException: [LDAP: код ошибки 32 - нет такого объекта]; оставшееся имя «ou = People» –

+0

Это еще одна проблема, я предлагаю вам задать вопрос, связанный с этой проблемой, с кодом и трассировкой стека, я посмотрю. Спасибо – EricLavault

+0

OK Я сделаю это –