我已经使用JNDI LDAP添加了一个新用户。而且我也可以通过编程方式启用帐户。但是,如果我尝试将用户添加到广告组中,我会发现和错误,这表明已经存在一个条目。请参阅下面的结果。
"域名"是组名称,但看来我试图重新添加该组。这是我的代码。
我在论坛上发现的任何示例都类似。
public void addUserToGroup() throws NamingException {
String groupDN = "CN=Domain Admins,CN=Users,DC=mydomain,DC=org";
// Create the objectclass
Attribute objClasses = new BasicAttribute("objectClass");
objClasses.add("top");
objClasses.add("group");
// Create a entry set of attributes
Attributes attrs = new BasicAttributes();
Attribute member = new BasicAttribute("member", getUserDN("jdoe"));
// Add these to the container
attrs.put(objClasses);
attrs.put(member);
try {
context.modifyAttributes(groupDN, DirContext.ADD_ATTRIBUTE, attrs);
} catch (Exception e) {
LOGGER.severe("Failed to Add User to Domain Admins -- ");
}
}
public String getUserDN(String aUsername) {
return "CN=" + aUsername + ",CN=" + "Users,DC=mydomain,DC=org";
}
这是结果的异常...
javax.naming.NamealReadyBoundException:[LDAP:错误代码68-00000562:UPDERR:DSID -031A11E2,问题6005(entry_exists(,数据0 0];其余名称'cn =域名,CN =用户,dc = myDomain,dc = org'
您正在添加一个属性,该属性具有在对象上已经存在的值: objectClass
。当您使用DirContext.ADD_ATTRIBUTE
时,LDAP服务器假设新值,而不是替换现有值。
为什么要将其添加到修改中?仅添加member
属性就足够了。尝试没有objectClass
属性,它应该可以工作。
已经有一段时间以来,我与jndi一起工作(这是一个20岁的图书馆(,但我仍然可以在这里提供。
ldap错误通常意味着他们所说的话,所以我毫不怀疑错误完全意味着它所说的内容(条目已经存在(。当然,这与您的代码相矛盾,这似乎只想进行ldapModify操作。
我想看看"电线上"会发生什么,那么如何使用tcpdump或wireshark抓住LDAP协议,然后检查它是否实际发送mod或添加操作?从理论上讲,此错误68只能来自添加,所以让我们看看这些数据包并找出真正发生的事情。