簡體   English   中英

JAVA ldap錯誤NO_OBJECT

[英]JAVA ldap error NO_OBJECT

更改密碼或更新用戶信息時,我會遇到此錯誤。 我已經嘗試了很多彼此相似的代碼,但是仍然出現錯誤。 該問題可能是錯誤的CN定義,但對於我來說應該是正確的,對此我感到非常難過,因為我無法面對問題。

  • 通過LDAP連接到服務器: OK
  • SSL和cacerts: 確定
  • 通過代碼添加用戶: OK
  • 獲取所有用戶信息: OK
  • 更新用戶信息: BAD

這是一個簡單的代碼,我嘗試在該代碼中成功更新用戶的信息(描述),但沒有成功。 用戶“蝙蝠俠”顯然存在於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");
    } 
    }

錯誤: 更新錯誤:javax.naming.NameNotFoundException:[LDAP:錯誤代碼32-0000208D:NameErr:DSID-0310020A,問題2001(NO_OBJECT),數據0,與以下項的最佳匹配:

崩潰位於函數updateDescription中的代碼的第六行。 有什么建議么?

查看您的代碼和錯誤消息,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的正確性,因為錯誤消息沒有指定不存在哪個對象。

根據您的代碼,該行將如下所示:

ctx.modifyAttributes("CN=batman,OU=SoftwareV3,OU=SOFTWARE,DC=SOFTWAREDEV,DC=LOCAL", mods);

像這樣嘗試,它對我有用:

ctx.modifyAttributes("CN=batman,OU=SoftwareV3,OU=SOFTWARE", mods);

我遵循了可以在此鏈接中看到的示例:

http://www.java2s.com/Code/JavaAPI/javax.naming.directory/DirContextmodifyAttributesStringnameintmodopAttributesattrs.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM