我需要修改LDAP中现有记录的属性。看起来这是获取记录的唯一方法是使用查找:
ctx.modifyAttributes(CN=Joe blue,cn=user,DC=foo,DC=com" , mods);
但我需要通过电子邮件(或登录)来获取它。我尝试了几种变体,但得到了一个命名异常,例如:
ctx.modifyAttributes(&(objectClass=user)(mail=jblow*)),cn=user,DC=foo,DC=com)
javax.naming.InvalidNameException :(&(objectClass = user)(mail = jblow *)),cn = user,DC = foo,DC = com:[LDAP:错误代码34 - 0000208F:NameErr:DSID- 031001BA,问题2006(BAD_NAME),数据8349,最佳匹配: '(&(objectClass = user)(mail = jblow *)),cn = user,DC = foo,DC = COM,
任何建议都将不胜感激。
答案 0 :(得分:1)
您无法为修改操作提供搜索过滤器。您需要提供完整的DN,如您的第一个示例所示。
因此,您首先必须在cn = user,dc = foo,dc = com的基本DN中搜索(mail = jblow *)以查找感兴趣对象的完整DN。
然后,您可以根据完整的DN进行修改。
答案 1 :(得分:1)
正如geoffc所说,你需要将“distinguishedName”传递给modifyAttributes函数以及mod。
您可以根据搜索约束(mail = jblow *)创建一个查询LDAP的单独函数,并返回“distinguishedName”字符串。然后只需将函数传递给ctx.modifyAttributes()。
String dn = distinguishedNameQuery();
ctx.modifyAttributes(dn, mods);