Java [LDAP:错误代码32-0000208D:NameErr:DSID-03100241,问题2001(无对象),数据0,最佳匹配:
我正在尝试使用SpringBooot将用户添加到Active directory组,使用以下代码Java [LDAP:错误代码32-0000208D:NameErr:DSID-03100241,问题2001(无对象),数据0,最佳匹配:,java,spring,spring-boot,ldap,ldap-query,Java,Spring,Spring Boot,Ldap,Ldap Query,我正在尝试使用SpringBooot将用户添加到Active directory组,使用以下代码 public boolean addMemberToGroup(String groupName, Person p) { boolean status = false; Name groupDn = buildGroupDn(groupName); Name personDn = buildPersonDn(p); try {
public boolean addMemberToGroup(String groupName, Person p) {
boolean status = false;
Name groupDn = buildGroupDn(groupName);
Name personDn = buildPersonDn(p);
try {
DirContextOperations ctx = ldapTemplate.lookupContext(groupDn);
ctx.addAttributeValue(UNIQUE_MEMBER, personDn);
ldapTemplate.modifyAttributes(ctx);
}catch (Exception e) {
logException
}
return status;
}
private Name buildGroupDn(String groupName) {
return LdapNameBuilder.newInstance(baseLdapPath)
.add("OU", "ghtc")
.add("OU", "IT")
.add("OU", "Groups")
.add("CN", groupName)
.build();
}
baseLdapPath=DC=emea,DC=testdir,DC=net,并将其添加到application.properties文件中
但当执行ldapTemplate.lookupContext(groupDn);时,会发生以下异常
嵌套异常为javax.naming.NameNotFoundException:[LDAP:错误代码32-0000208D:NameErr:DSID-03100241,问题2001(无对象),数据0,最佳匹配:
'DC=emea,DC=testdir,DC=net'
剩余名称'CN=GroupAMC,OU=Groups,OU=IT,OU=ghtc,DC=emea,DC=testdir,DC=net'
我已验证组的可分辨名称为CN=GroupAMC,OU=Groups,OU=IT,OU=ghtc,DC=emea,DC=testdir,DC=net
我在这里遗漏了什么?我可以使用下面的链接解决错误 生成groupName时baseDn出现问题。删除baseLdapPath修复了该问题
private Name buildGroupDn(String groupName) {
return LdapNameBuilder.newInstance()
.add("OU", "ghtc")
.add("OU", "IT")
.add("OU", "Groups")
.add("CN", groupName)
.build();
}
我们看不到此过程中传递的代码,但您确定组名为“对应组的DN,包括groupSearchBase”()我还添加了buildGroupDn代码。这是否与将作用域设置为子树作用域有关。因为当我使用SearchControls搜索时,我可以在将作用域设置为子树作用域时找到该组只是出于好奇,您确定“baseLdapPath”设置为“DC=emea,DC=testdir,DC=net”吗?您可以使用ldapsearch执行相同的搜索吗?是的,我已经验证了。我也可以搜索组。这与访问有关吗?我的LDAP服务器的凭据还没有写访问权限。我认为使用读访问权限,我应该能够执行lookupContext,并且在修改属性时应该会遇到异常,如果您可以使用anon使用ldapsearch进行大量查找,那么应该不会有问题。如果您不能,那么是的,这可能是您的问题。我要求您检查,因为“最佳匹配”位,但我认为它正在正确执行。很高兴您找到了解决方案!