2015-03-19 34 views
0

我想編寫一個java程序,它將用戶作爲輸入並在OpenDS或LDAP中搜索,並告訴用戶屬於哪個特定的組。用戶可以是多個組的一部分,我想知道用戶所屬的所有組。java程序告訴用戶屬於哪個組在LDAP中

此外,我有超過800個用戶屬於Excel文件中的各個組。我想查詢他們所有人。這裏是查詢下面這是給我一個用戶所需的結果。

ldapsearch --hostname myhost --port 3890 --baseDN s=s-i -D cn=Manager -w ldapadmin --searchScope sub "(&(objectclass=groupOfUniqueNames)(uniqueMember=cn=Kevin,ou=standard,ou=users,ou=tpc,dc=intra))" 

現在我想爲此編寫一個java代碼。 下面是Java代碼我與不同的用戶嘗試: - 上述

 import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.util.Hashtable; 
import java.util.Enumeration; 

import javax.naming.*; 
import javax.naming.directory.*; 
    public class LDAP_Reader_MultiUser1 { 
    public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory"; 
    public static String MY_HOST = "ldap://singh.plm.com:3890"; 
    public static String MY_SEARCHBASE = "cn=Public,x=x-y,ou=people,cn=UserBAse_8.0,cn=Application Services,o=x-y"; 
    public static String MY_FILTER = "(&(objectclass=groupOfUniqueNames)(uniqueMember="; 
    public static String MGR_DN = "cn=Manager"; 
    public static String MGR_PW = "ldapadmin"; 
    public static void main(String[] args) { 
     String[] MY_FILTER2=null; 
    try{ 
     String fileName="C:\\report\\report.txt"; 
     FileReader inputFile = new FileReader(fileName); 
     BufferedReader bufferReader = new BufferedReader(inputFile); 
     String line; 

     int i=0; 
     while ((line = bufferReader.readLine()) != null) 
     { 
      System.out.println("Reading text file"); 
      MY_FILTER2[i]=line; 
      i++; 
     } 
     int j=i; 
     while(j>0) 
     { 
      System.out.println("MAking my_filter_final"); 
     String MY_FILTER_Final=MY_FILTER+MY_FILTER2[i]+"))\""; 
     i--; 

    Hashtable env = new Hashtable(); 
    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,MGR_DN); 
    env.put(Context.SECURITY_CREDENTIALS,MGR_PW); 
    DirContext ctx = new InitialDirContext(env); 
    SearchControls constraints = new SearchControls(); 
    constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); 
    //performs the actual search 
    //We give it a searchbase, a filter and the contraints containing the scope 
    //of the search 
    NamingEnumeration results = ctx.search(MY_SEARCHBASE,MY_FILTER_Final,constraints); 
    //now stop through the search results 
    while(results != null && results.hasMore()){ 
    SearchResult sr = (SearchResult)results.next(); 
    String dn = sr.getName(); 
    System.out.println("Distinguished name is "+dn); 
    Attributes attrs = sr.getAttributes(); 
    NamingEnumeration ne = attrs.getAll(); 
    while(ne.hasMoreElements()) { 
    Attribute attr = (Attribute) ne.next(); 
    String attrID = attr.getID(); 
    System.out.println(attrID+" :"); 
    Enumeration vals = attr.getAll(); 
    while(vals.hasMoreElements()) { 
    System.out.println("\t"+vals.nextElement()); 
    } 
    } 
    System.out.println("\n"); 
    } 
     } 
    }catch(Exception ex){ 
    ex.printStackTrace(); 
    System.exit(1); 
    } 
    } 
    } 

的代碼提供了以下錯誤輸出。

Reading text file 
java.lang.NullPointerException 
    at com.LDAP_Reader_MultiUser1.main(LDAP_Reader_MultiUser1.java:32) 

目前使用OpenDS的和開放的LDAP

+0

無雜念,沒有閒聊(讀作[幫助→遊(http://stackoverflow.com/tour)),因此離開了感謝並從任何好問題中提出關於緊迫性的陳述。 – Anthon 2015-03-19 07:09:39

+0

我做了一個LDAP查詢它搜索用戶屬於哪個組。 – 2015-03-20 08:34:29

+0

解決了空指針異常的問題但它沒有返回多個組。 – 2015-03-24 12:35:52

回答

0
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Hashtable; 
import java.util.Enumeration; 

import javax.naming.*; 
import javax.naming.directory.*; 
    public class LDAP_Reader_MultiUser1 { 
    public static String INITCTX = "com.sun.jndi.ldap.LdapCtxFactory"; 
    public static String MY_HOST = "ldap://singh.local.com:3890"; 

    public static String MY_SEARCHBASE = "cn=Public,x=x-y,ou=people,cn=UserBase_8.0,cn=Application Services,x=x-y"; 

    public static String MY_FILTER = "(&(objectclass=groupOfUniqueNames)(uniqueMember="; 
    public static String MGR_DN = "cn=Manager"; 
    public static String MGR_PW = "ldapadmin"; 

    public static void main(String[] args) throws IOException { 
     String[] MY_FILTER2=new String[900]; 

    try{ 
     String fileName="C:\\report\\report.txt"; 
     FileReader inputFile = new FileReader(fileName); 
     BufferedReader bufferReader = new BufferedReader(inputFile); 
     String line; 
     String only_name; 
     int i=0; 
     while ((line = bufferReader.readLine()) != null) 
     { 

      MY_FILTER2[i]=line; 
      //System.out.println("My_Filter2="+MY_FILTER2[i]); 
      i++; 

     only_name="ram"; 

      //System.out.println("MAking my_filter_final"); 
     String MY_FILTER_Final=MY_FILTER+line+"))"; 



    Hashtable env = new Hashtable(); 
    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,MGR_DN); 
    env.put(Context.SECURITY_CREDENTIALS,MGR_PW); 
    DirContext ctx = new InitialDirContext(env); 
    SearchControls constraints = new SearchControls(); 
    constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); 
    //performs the actual search 
    //We give it a searchbase, a filter and the contraints containing the scope 
    //of the search 
    NamingEnumeration results = ctx.search(MY_SEARCHBASE,MY_FILTER_Final,constraints); 
    //now stop through the search results 
    while(results==null) 
    { 
     System.out.println("**************************************"+line+"$$$$$does not exit in USerlist"); 
    } 
    while(results != null && results.hasMore()){ 
    SearchResult sr = (SearchResult)results.next(); 
    String dn = sr.getName(); 
    String state = dn.substring(dn.indexOf("cn=")+3); 
    System.out.println(line+" Belongs to Group="+state); 
    Attributes attrs = sr.getAttributes(); 
    NamingEnumeration ne = attrs.getAll(); 

    //System.out.println("\n"); 
    } 
     } 
    }catch(Exception ex){ 
    ex.printStackTrace(); 
    System.exit(1); 
    } 
    } 
    } 
相關問題