JAVA ldap 错误 NO_OBJECT

标签 java ldap

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

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

这是一个简单的代码,我尝试更新用户的信息(描述),但没有成功。 用户“batman”显然存在于 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 中的第 6 行代码。 有什么建议吗?

最佳答案

查看您的代码和错误消息,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= bat 侠、OU=SoftwareV3、OU=SOFTWARE、DC=SOFTWAREDEV、DC=LOCAL

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

关于JAVA ldap 错误 NO_OBJECT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24485722/

相关文章:

Java Recursion - 几个递归调用的输出

java - 如何在 JFrame 中使单个 JPanel 变大

Java - Leetcode 二和 HashMap 解决方案

active-directory - 访问电子邮件和移动客户端中的联系人 : LDAP or CardDAV?

java - Solr文档中动态键值对的存储和搜索

java - IndexOutOfBounds 使用 Javas imageio.write() 创建 png 格式的字节数组

c++ - C++ 中的 Windows LDAP 身份验证

java - LDAP "simple"用户身份验证(JNDI - Tomcat)不稳定?

active-directory - ldapsearch整个事件目录,无refldap返回

java - Spring LDAP 引用 : No PersonRepo interface