java:ldap NamingException

mon*_*yag 3 java ldap active-directory

我尝试使用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);
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

我该如何解决这个问题?

Sha*_*Fel 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
Run Code Online (Sandbox Code Playgroud)

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

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