添加使用JNDI LDAP条目(Adding LDAP entries using JNDI)

2019-07-29 12:49发布

我试图添加到使用JNDI LDAP服务器中的条目。 我可以成功读取从LDAP服务器中的条目。 但是,当我尝试添加新条目我收到错误。 我检查了各种方法,但我失败了。

    private String getUserAttribs (String searchAttribValue) throws NamingException{
    SearchControls ctls = new SearchControls();
    ctls.setSearchScope(SearchControls.OBJECT_SCOPE);

    Attributes matchAttrs = new BasicAttributes(true);
    matchAttrs.put(new BasicAttribute("uid", searchAttribValue));
    NamingEnumeration answer = ctx.search("ou=People,ou=ABCLdapRealm,dc=abcdomain",matchAttrs);

    SearchResult item =(SearchResult) answer.next();
    // uid userpassword description objectclass wlsmemberof sn cn
    return item.toString();
}

这工作正常。

然后,我向前移动一步,尝试添加一个条目。 的代码如下。

    public static void bindEntry(DirContext dirContext)throws Exception{
    Attributes matchAttrs = new BasicAttributes(true);
    // uid userpassword description objectclass wlsmemberof sn cn
    matchAttrs.put(new BasicAttribute("uid", "defaultuser"));
    matchAttrs.put(new BasicAttribute("userpassword", "password"));
    matchAttrs.put(new BasicAttribute("description", "defaultuser"));
    matchAttrs.put(new BasicAttribute("cn", "defaultuser"));
    matchAttrs.put(new BasicAttribute("sn", "defaultuser"));

    matchAttrs.put(new BasicAttribute("objectclass", "top"));
    matchAttrs.put(new BasicAttribute("objectclass", "person"));
    matchAttrs.put(new BasicAttribute("objectclass", "organizationalPerson"));
    matchAttrs.put(new BasicAttribute("objectclass","inetorgperson"));
    matchAttrs.put(new BasicAttribute("objectclass", "wlsUser"));
    String name="uid=defaultuser";
    InitialDirContext iniDirContext = (InitialDirContext)dirContext;
    iniDirContext.bind(name,dirContext,matchAttrs);
}

但有了这个我得到一个例外。

Exception in thread "main" javax.naming.OperationNotSupportedException: [LDAP: error code 53 - Unwilling To Perform]; remaining name 'uid=defaultuser'

当然,我违反了什么。 在这个任何想法?

Answer 1:

LDAP 53,不愿意执行,通常意味着它说什么。 您试图从LDAP服务器的角度做一些“非法”。

首先猜测,虽然不太可能,你指向的eDirectory? 如果是这样,将Sn是很重要的,因为它是在eDirectory的架构,以提供在创建时的姓值是强制性的。 在这种情况下,你可能会得到一个稍微不同的错误,更像是一个608或611错误。

第二次猜测,你点的Active Directory,在这种情况下,全名是强制属性。 但是,在这种情况下,你也通常会得到一个slightlty不同的结果代码。 应该有更多的错误。 (虽然这可能是JNDI的回归对我使用过的工具)。

三猜,你是在别人的LDAP服务器指着你已经错过了在模式中的强制属性。

事实上,也许这是一个对象类的问题。 是wlsUser一个辅助类,或者一个真正的类? 是为inetOrgPerson一个真正的(我消隐上的名字为这个类型的类,有AUX,结构,以及其他内容)类在目录中?

我的基本的猜测是,你已经错过了一个强制性的属性,在目标目录中违反模式,我希望缺少强制性真实上面列出的可能的例子是有帮助的。



Answer 2:

这是试图通过非SSL连接设置Active Directory中的密码,当你的错误。 再试试你的代码没有密码线。



Answer 3:

嗨通过使用下面的代码,我能够插入到人从JNDI程序LDAP

Attributes attributes=new BasicAttributes();
Attribute objectClass=new BasicAttribute("objectClass");
objectClass.add("inetOrgPerson");
attributes.put(objectClass);

Attribute sn=new BasicAttribute("sn");
Attribute cn=new BasicAttribute("cn");

sn.add("sahul");
cn.add("vetcha");

attributes.put(sn);
attributes.put(cn);
attributes.put("title","software engg")
ctx.createSubcontext("uid=sahul,ou=some organization7,o=some company7,ou=system",attributes);


文章来源: Adding LDAP entries using JNDI
标签: java ldap jndi