2014-10-10 169 views
2

在Grails项目中,我需要连接Active Directory并搜索用户(身份验证目的)。连接到Active Directory并搜索用户

我在LDAP和Active Directory中使用Groovy LDAP API或更大。

我公司给了我一个用户凭证用于测试

OU=Vendors,DC=company,DC=net 
CN=Testing -2 
sAMAccountName=test2 
password=test123 
ip=LDAP://xx.xx.xx.xx:389 

所以对于我的尝试

LDAP ldapConn = LDAP.newInstance("LDAP://xx.xx.xx.xx:389", "CN=Testing -2,OU=Vendors,DC=company,DC=net", "test123") 
try{ 
    def results = ldapConn.search('(CN=Testing -2)', 'OU=Vendors,DC=company,DC=net', SearchScope.ONE) 
    println "${results.size} entries found:" 
    println results 
} 
catch(Exception ex){ 
    println ex.printStackTrace() 
} 

上面的代码工作,我使用CN=Testing -2与Active Directory的结合,但公司员工始终使用sAMAccountName进行登录。

所以,当我试图与sAMAccountName赋= TEST2和密码绑定

LDAP ldapConn = LDAP.newInstance("LDAP://xx.xx.xx.xx:389", "sAMAccountName=test2,OU=Vendors,DC=company,DC=net", "test123") 
try{ 
    def results = ldapConn.search('(sAMAccountName=test2)', 'OU=Vendors,DC=company,DC=net', SearchScope.ONE) 
    println "${results.size} entries found:" 
    println results 
} 
catch(Exception ex){ 
    println ex.printStackTrace() 
} 

我越来越

java.lang.NullPointerException 
Error | 
    at org.apache.directory.groovyldap.LDAP.search(Unknown Source) 
Error | 
    at org.apache.directory.groovyldap.LDAP$search.call(Unknown Source) 
Error | 

让我怎么继续,test2的用户总是用户自己sAMAccountName (test2)与登录不CN (Testing -2)

回答

2

嗯,这里有两件不同的事情。首先创建新的LDAP实例(LDAP.newInstance),然后创建搜索进程(ldapConn.search)。在您的示例代码中,您对两种方法都使用相同的凭据。但它确实应该是:

  • LDAP.newInstance
  • 不同的sAMAccountName有效的连接字符串来测试针对的ldapConn.search

因此作为第一步,你应该尝试使用你原来的工作连接字符串(包括LDAP.newInstance("LDAP://xx.xx.xx.xx:389", "CN=Testing -2,... - 对于初学者),并在您的ldapConn.search离开您要检查的sAMAccountName

说明:根据您的设置,连接您尝试的方式可能是无效的,此外,它将是一种更简洁的方法,可以不检查两个地方,但初始连接肯定工作,只有搜索返回实际结果。

在下面的文章有关于不同LDAP属性,这也可能是有益的一些信息: http://www.computerperformance.co.uk/Logon/LDAP_attributes_active_directory.htm