#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 в качестве субтекста этого.