通过JAVA代码在AD上运行LDAP查询
我已经在windows server 2012 R2上配置了ADDC,并且在DC中添加了两个用户——一个是windows 8,另一个是ubuntu Windows server 2012用户名-DC Windows 8.1用户名-Win Ubuntu用户名-Linux 我正试图实现这一点——我想在ubuntu中编写java程序,该程序将连接到ADDC并发回有关Windows8.1的详细用户信息 我的程序就像-通过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
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。。这有意义吗?我不确定,我想这只是配置的域名。