Вопрос по java, ldap – Добавление записей LDAP с использованием JNDI

4

Я пытаюсь добавить запись на сервер LDAP, используя JNDI. Я мог успешно прочитать записи с сервера 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'

Определенно я что-то нарушаю. Есть идеи по этому поводу?

Ваш Ответ

3   ответа
2

Привет, используя приведенный ниже код, я могу вставить человека в ldap из программы jndi

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);
2

Это ошибка, которую вы получаете при попытке установить пароль в Active Directory через не-SSL-соединение. Попробуйте еще раз свой код без строки пароля.

Error: User Rate Limit Exceeded
4

LDAP 53, «Нежелание выполнять», обычно означает, что он говорит. Вы пытались сделать что-то «незаконное» с точки зрения серверов LDAP.

Первое предположение, что вряд ли вы указываете на eDirectory? Если это так, добавление sn является важным, поскольку в схеме eDirectory обязательно указывать значение фамилии во время создания. В этом случае вы, вероятно, получите немного другую ошибку, более похожую на ошибку 608 или 611.

Второе предположение, вы указываете на Active Directory, и в этом случае fullName является обязательным атрибутом. Но в этом случае вы также обычно получаете немного другой код результата. Должно быть больше в ошибке. (Хотя это может быть возвращение JNDI по сравнению с инструментами, которые я тоже использую).

Третье предположение, вы указываете на кого-то еще, LDAP-сервер, и вы пропустили обязательный атрибут в схеме.

На самом деле, возможно, это проблема класса объекта. Является ли wlsUser вспомогательным классом или реальным классом? Является ли inetorgperson реальным (я не обращаю внимания на название для этого типа класса, есть вспомогательный, структурный и что-то еще) класс в вашем каталоге?

Мое основное предположение заключается в том, что вы пропустили обязательный атрибут и нарушаете схему в целевой папке, и я надеюсь, что возможные примеры пропуска обязательных списков, перечисленные выше, будут полезны.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded Chathuranga Chandrasekara

Похожие вопросы