проблема с подключением ldap

#java #jboss #ldap

#java #jboss #ldap

Вопрос:

У меня есть следующая конфигурация в моем jboss-conf.xml который я использую в коде для создания нового пользователя в LDAP.

  <login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required" >
        <module-option name="debug">true</module-option> 
        <module-option name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</module-option>
            <module-option name="java.naming.security.authentication">simple</module-option>
            <module-option name="pwdChangeAttr">pwdattribute</module-option>
        <!-- number that represents (busnessUser|nonBusinessUser) and (inactive|active|discarded) - uses bitwise-->
        <module-option name="userType">employeeType</module-option>
            <module-option name="java.naming.provider.url">ldap://devhost-ldap.ghost.com:10389</module-option>
            <module-option name="bindDN">uid=root,ou=users,dc=Product,DC=Ghost,DC=COM</module-option>
            <!--module-option name="jaasSecurityDomain">jboss.security:service=JaasSecurityDomain,domain=jmx-console</module-option-->   
            <!--module-option name="bindCredential">1hzUmi4rjRZcWdVFqoh7FD</module-option-->
            <module-option name="bindCredential">GhostCredential</module-option>
            <module-option name="rolesDn">ou=groups</module-option>
            <module-option name="usersDn">ou=users</module-option>
            <module-option name="objectClass">groupOfNames</module-option>
    <module-option name="baseCtxDN">dc=product,dc=ghost,dc=com</module-option>
    <module-option name="baseFilter">(uid={0})</module-option>
    <module-option name="rolesCtxDN">dc=Product,dc=ghost,dc=com</module-option>
    <module-option name="roleFilter">(member={1})</module-option>
    <module-option name="roleAttributeID">cn</module-option>
    <module-option name="roleRecursion">-1</module-option>
    <module-option name="searchScope">SUBTREE_SCOPE</module-option>
    <module-option name="defaultRole">Authenticated</module-option>
    <module-option name="allowEmptyPasswords">false</module-option> 
     </login-module>
  

Я создаю субтекст, подобный:

 createUserAttr.append(userAttrName).append(ASSIGNMENT_OPERATER)
                .append(userUid).append(COMMA_SEPARATER)
                .append(commonNameAttribute).append(ASSIGNMENT_OPERATER)
                .append(userDistinguishedName);
        logger.info("createUserAttr: "   createUserAttr.toString());
        getLdapConnection().createSubcontext(createUserAttr.toString(),
                atrs);
  

где регистратор выводит: createUserAttr: uid=test,ou=users

Не могли бы вы, пожалуйста, сказать мне, почему я все еще получаю это исключение?

    An exception has occured when trying to create an LDAP user javax.naming.NameNotFoundException:
 [LDAP: error code 32 - The provided entry uid=test,ou=users cannot be added because its suffix is not defined as one of the suffixes within the Directory Server]; remaining name 'uid=root,ou=users'
  

Ответ №1:

Здесь есть цикличность. Похоже, вы пытаетесь использовать uid = root, ou = users, dc= Product, DC = Ghost, DC = COM в качестве имени входа для внесения изменений в каталог, и вы также пишете код для создания этого пользователя. Как это будет работать?

Если это каким-то образом сработает, ошибка просто означает, что контекст, возвращаемый getLdapConnection(), не может содержать uid RDN = root,ou = users. Я думаю, вам нужно просто указать здесь односоставное RDN, поэтому вам следует перейти к контексту «пользователи» и создать uid = root в качестве субтекста этого.