JNDI с Active Directory PartialResultException - PullRequest
15 голосов
/ 31 марта 2011

Я в основном хожу по дереву 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)

Ответы [ 2 ]

31 голосов
/ 01 апреля 2011

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

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

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

3 голосов
/ 19 января 2017

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

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

...