java:ldap NamingException

时间:2011-08-12 07:01:18

标签: java active-directory ldap

我尝试使用LDAP身份验证。

public boolean login(String username, String password){
    AndFilter filter = new AndFilter();
    filter.and(new EqualsFilter("objectclass", "person")).and(new EqualsFilter("uid", username));
    return ldapTemplate.authenticate(DistinguishedName.EMPTY_PATH, filter.toString(), password);
}

因为我使用了ActiveDirectory服务器,所以我有这个例外:

  

javax.naming.NamingException:[LDAP:错误代码1 - 000020D6:SvcErr:DSID-03100754,问题5012(DIR_ERROR),数据0]; remaning name ='/'

在我看来,这个例外表明,因为我使用了DistinguishedName.EMPTY_PATH

我如何解决这个问题?

1 个答案:

答案 0 :(得分:11)

您遇到的实际错误如下:

//
// MessageId: ERROR_DS_MISSING_SUPREF
//
// MessageText:
//
//  No superior reference has been configured for the 
//  directory service. The directory service is therefore 
//  unable to issue referrals to objects outside this forest.
//
#define ERROR_DS_MISSING_SUPREF          8406L

可以通过将您的错误代码( 000020D6 )转换为十进制并检入winerror.h来找到。

在我看来,您需要为正在执行的搜索提供基本DN。您提供的(默认情况下,未指定时)是 / ,这不是有效的DN。如果您的域名是 domain.example.com ,则有效的基本DN将是 DC = domain,DC = example,DC = com