JAVA ldap错误NO_OBJECT

use*_*718 0 java ldap

我更改密码或更新用户信息时遇到此错误.我尝试了很多彼此相似的代码,但我仍然遇到了错误.这个问题可能是一个糟糕的CN定义,但在我的情况下应该是正确的,我真的很难过,因为我无法面对这个问题.

  • 通过LDAP连接到服务器:好的.
  • SSL和cacerts:好的.
  • 通过代码添加用户:确定.
  • 获取所有用户信息:好的.
  • 更新用户的信息:.

这是一个简单的代码,我尝试更新用户的信息(描述),但没有成功.用户"蝙蝠侠"显然存在于AD中.

public class ADConnection {

DirContext ctx = null;
String baseName = ",OU=SoftwareV3,OU=SOFTWARE,DC=SOFTWAREDEV,DC=LOCAL";
String serverIP = "192.168.10.45";
boolean ssl = true;

public ADConnection() {
    try {
        Hashtable ldapEnv = new Hashtable(); 
        ldapEnv.put(Context.INITIAL_CONTEXT_FACTORY,             "com.sun.jndi.ldap.LdapCtxFactory"); 
        if(ssl==true)
        {
            ldapEnv.put(Context.PROVIDER_URL, "ldaps://192.168.10.45:636/dc=softwaredev,dc=local");
            ldapEnv.put(Context.SECURITY_PROTOCOL, "ssl");
        }
        else
        {
            ldapEnv.put(Context.PROVIDER_URL, "ldap://192.168.10.45:389/dc=softwaredev,dc=local");
        }
        ldapEnv.put(Context.SECURITY_AUTHENTICATION, "simple"); 
        ldapEnv.put(Context.SECURITY_PRINCIPAL, new String("softwaredev" + "\\" +     "superadmin"));
        ldapEnv.put(Context.SECURITY_CREDENTIALS, "passw0rd");  
        ctx = new InitialDirContext(ldapEnv); 
    } 
    catch (Exception e) { 
        System.out.println(" bind error: " + e); 
        e.printStackTrace(); 
        System.exit(-1); 
    } 
}

public void updateDescription(String username) {
    try {
      System.out.println("updating...\n");
      ModificationItem[] mods = new ModificationItem[1];
      mods[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE,
        new BasicAttribute("description", "batman_description"));
      ctx.modifyAttributes("CN=" + username + baseName, mods);
      System.out.println("update successful!!!");
     }
      catch (Exception e) {
        System.out.println(" update error: " + e);
        System.exit(-1);
      }
  }

public static void main(String[] args) { 
    ADConnection adc = new ADConnection(); 
    adc.updateDescription("batman");
    } 
    }
Run Code Online (Sandbox Code Playgroud)

错误: 更新错误:javax.naming.NameNotFoundException:[LDAP:错误代码32 - 0000208D:NameErr:DSID-0310020A,问题2001(NO_OBJECT),数据0,最佳匹配:

崩溃发生在函数updateDescription的第6行代码中.有什么建议?

mvr*_*ijn 5

查看您的代码和错误消息,AD表示DN CN=batman,OU=SoftwareV3,OU=SOFTWARE,DC=SOFTWAREDEV,DC=LOCAL不存在.此消息适用于整个 DN树.

这意味着这些对象中的任何一个都不存在:

  • DC =本地
  • DC = SOFTWAREDEV,DC = LOCAL
  • OU = SOFTWARE,DC = SOFTWAREDEV,DC = LOCAL
  • OU = SoftwareV3,OU = SOFTWARE,DC = SOFTWAREDEV,DC = LOCAL
  • CN =蝙蝠侠,OU = SoftwareV3,OU = SOFTWARE,DC = SOFTWAREDEV,DC = LOCAL

您应该使用LDAP浏览器检查整个DN的正确性,因为错误消息未指定哪个对象不存在.