作为 LDAP 的新手,我一直困惑于一切都在寻找什么。目前我正在尝试添加用户。常见的示例代码通常有一个 create 函数和一个 buildDn 函数,但每个函数中的代码通常非常相似。这是我所拥有的:
public void create(User u) {
Name dn = buildDn(u);
DirContextAdapter context = new DirContextAdapter(dn);
context.setAttributeValues("objectclass", new String[] {"top", "person"});
context.setAttributeValue("cn", u.getName());
context.setAttributeValue("sAMAccountName", u.getUserName());
_ldapTemplate.bind(context);
}
和 buildDn 函数:
protected Name buildDn( User u ) {
return LdapNameBuilder.newInstance()
.add("cn", u.getName())
.add("sAMAccountName", u.getUserName())
.build();
}
当我尝试添加用户时遇到的错误是 500 错误,控制台显示:
Caused by: org.springframework.ldap.NameNotFoundException:
[LDAP: error code 32 - 0000208D: NameErr: DSID-0310020A, problem 2001 (NO_OBJECT), data 0, best match of:
'OU=**,OU=**,DC=**,DC=**,DC=**'];
nested exception is javax.naming.NameNotFoundException:
[LDAP: error code 32 - 0000208D: NameErr: DSID-0310020A, problem 2001 (NO_OBJECT), data 0, best match of:
'OU=**,OU=**,DC=**,DC=**,DC=**'];
remaining name 'sAMAccountName=**,cn=**'
我已将用户特定数据替换为 **。由于上面提到的两个函数都是添加/设置属性,我不确定哪一个出了问题以及为什么。也许我完全忽略了这个问题。 TIA
最佳答案
您需要阅读 LDAP 的一些基础知识(如果您通过 google 搜索,很容易找到教程):条目的专有名称 (DN) 是其唯一标识符,指定在 LDAP 树中可以找到该条目的位置。 LDAP 条目上的属性是绑定(bind)到该条目的数据。
在您的示例中,您需要修改 buildDn 函数以指定 LDAP 树中要放置 LDAP 条目的正确位置(相对于配置中指定的基本 DN)。根据您要创建的 LDAP 条目的 objectClass,可能还需要其他属性(条目的 objectClass 定义允许哪些属性以及需要哪些属性)
关于java - LDAP:buildDn() 和 context.setAttributeValues 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31678759/