Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过JAVA代码在AD上运行LDAP查询_Java_Ldap_Connection - Fatal编程技术网

通过JAVA代码在AD上运行LDAP查询

通过JAVA代码在AD上运行LDAP查询,java,ldap,connection,Java,Ldap,Connection,我已经在windows server 2012 R2上配置了ADDC,并且在DC中添加了两个用户——一个是windows 8,另一个是ubuntu Windows server 2012用户名-DC Windows 8.1用户名-Win Ubuntu用户名-Linux 我正试图实现这一点——我想在ubuntu中编写java程序,该程序将连接到ADDC并发回有关Windows8.1的详细用户信息 我的程序就像- import java.util.Hashtable; import javax.n

我已经在windows server 2012 R2上配置了ADDC,并且在DC中添加了两个用户——一个是windows 8,另一个是ubuntu

Windows server 2012用户名-DC Windows 8.1用户名-Win Ubuntu用户名-Linux 我正试图实现这一点——我想在ubuntu中编写java程序,该程序将连接到ADDC并发回有关Windows8.1的详细用户信息

我的程序就像-

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.NamingEnumeration;
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;

public class LdapSearch {
public static void main(String[] args) throws Exception {
Hashtable env = new Hashtable();

String sp = "com.sun.jndi.ldap.LdapCtxFactory";
env.put(Context.INITIAL_CONTEXT_FACTORY, sp);

String ldapUrl = "ldap://server.com, dc=com";
env.put(Context.PROVIDER_URL, ldapUrl);

DirContext dctx = new InitialDirContext(env);

String base = "ou=name";

SearchControls sc = new SearchControls();
String[] attributeFilter = { "cn", "mail" };
sc.setReturningAttributes(attributeFilter);
sc.setSearchScope(SearchControls.SUBTREE_SCOPE);

String filter = "(&(sn=W*)(l=Criteria*))";

NamingEnumeration results = dctx.search(base, filter, sc);
while (results.hasMore()) {
  SearchResult sr = (SearchResult) results.next();
  Attributes attrs = sr.getAttributes();

  Attribute attr = attrs.get("cn");
  System.out.print(attr.get() + ": ");
  attr = attrs.get("mail");
  System.out.println(attr.get());
}
dctx.close();
}
我正在参考上面的程序,并试图通过LDAP java实现与AD的连接。我不知道如何得到你,cn等。。我对LDAP、ADDC的概念非常陌生

有什么想法吗?请让我知道

谢谢,
saurabh

我在C语言中也做过类似的场景,所以我不确定Java中的连接设置,但对于相似性,您应该为LDAP创建一个目录条目,并提供可以访问active directory的授权用户的路径、用户名和密码,我没有在路径中提供DC,只是在LDAP路径中提供DC,然后根据用户名搜索的查询过滤器参数被删除

Filter = "(& (SAMAccountName=" + name + ") (| (&(objectCategory=person)(objectClass=user)(!(homeMDB=*))(!(msExchHomeServerName=*)))(&(objectCategory=person)(objectClass=user)(|(homeMDB=*)(msExchHomeServerName=*))) ))";
然后,它将在类似arraylist的对象中为您提供一个结果,这样您就可以通过提供属性名来查询所需的其余信息,您可以在这里找到LDAP属性列表


感谢穆罕默德的回复。。但是错误仍然是一样的。。别给我任何线索来摆脱它。。它在主线程javax.naming.InvalidNameException:cn=DOMAIN\Win中将错误显示为-Exception:[LDAP:错误代码34-0000208F:LDAPPER:DSID-0C090752,注释:错误处理名称,数据0,v2580];剩余名称'cn=DOMAIN\Win'域名是-HDOMAIN.localok我会告诉你我的设置,我在一个公司网络上,域名是dalgroup.com,,,所以我转到我电脑的系统属性,将它设置为域的成员,然后这就是我创建的目录条目对象DirectoryEntry=newdirectoryentryldap://DALGROUP,domainAccountName@dalgroup.com暗语然后我创建了一个目录搜索器对象来使用这个条目,并给它提供了筛选标准OK。。谢谢你的回复。我必须找出java中DirectoryEntry的等效项。。我猜HDOMAIN.local-是因为.local而不是应该是.com。。这有意义吗?我不确定,我想这只是配置的域名。