我尝试使用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
。
我如何解决这个问题?
答案 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 。