Подтвердить что ты не робот

JNDI с Active Directory PartialResultException

В основном я хожу по дереву LDAP в Active Directory.

На каждом уровне я запрашиваю "(objectClass=*)". Когда я делаю это в корне, например "dc=example,dc=com", я получаю исключение ниже. Это отлично работает в наших других экземплярах LDAP. По какой-то причине только на нашем сервере Active Directory я получаю это исключение. Я также получаю такое же исключение при использовании JXplorer на нашем сервере Active Directory.

От чтения в Интернете я обнаружил, что люди говорят, что вам следует включить следующее, не уверен, что это значит... Итак, на моем объекте управления (javax.naming.directory.SearchControls), который я передаю с запросом, я вызываю searchControls.setDerefLinkFlag(true). Я также попытался установить его на false с тем же результатом. Любые предложения о том, что еще может это сделать? Может быть, как я могу это исправить?

Примечание. В этом сообщении я изменил baseDn с dc=<my company domain> на пример для конфиденциальности моих компаний.

javax.naming.PartialResultException: Unprocessed Continuation Reference(s); remaining name 'dc=example,dc=com'
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2820)
at com.sun.jndi.ldap.LdapCtx.processReturnCode(LdapCtx.java:2794)
at com.sun.jndi.ldap.LdapCtx.searchAux(LdapCtx.java:1826)
at com.sun.jndi.ldap.LdapCtx.c_search(LdapCtx.java:1749)
at com.sun.jndi.toolkit.ctx.ComponentDirContext.p_search(ComponentDirContext.java:368)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:338)
at com.sun.jndi.toolkit.ctx.PartialCompositeDirContext.search(PartialCompositeDirContext.java:321)
at javax.naming.directory.InitialDirContext.search(InitialDirContext.java:248)
at com.motio.pi.gui.panels.useraccess.ldap.LDAPConnector.query(LDAPConnector.java:262)
at com.motio.pi.gui.selector.directory.CognosDirectoryBrowserController.expandCognosTreeNode(CognosDirectoryBrowserController.java:99)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.motio.pi.utils.PIThreadDelegate$1.run(PIThreadDelegate.java:54)
at java.lang.Thread.run(Thread.java:662)
4b9b3361

Ответ 1

Итак, когда я создавал свой контекст именования с помощью метода:

javax.naming.ldap.InitialLdapContext.InitialLdapContext(
   Hashtable<?, ?> environment, Control[] connCtls)

В аргументе environment есть свойство с именем Context.REFERRAL, и его значение должно быть установлено: follow. Это была настройка, в которой я нуждался.

Ответ 2

Если вы получаете исключение во время использования реферала (например: время ожидания подключения), вы можете использовать игнорирование ссылок, но вы не хотите получать частичное исключение, вы можете использовать номер порта 3268 вместо 389, этот порт использует глобальный каталог для LDAP. Вы можете найти информацию по следующей ссылке;

https://technet.microsoft.com/en-us/library/how-global-catalog-servers-work(v=ws.10).aspx