|
Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот урок отвечает, что у часто задаваемых пользователей вопросов часто есть при использовании JNDI к доступу службы LDAP. Некоторым из типичных проблем отвечают в Проблеме, Стреляющей в Подсказки урока Операций Именования и Каталога.
Ответ зависит от реализации. Это - то, потому что Context и интерфейсы не определяют требования синхронизации. Реализация Sun LDAP оптимизируется для однопоточного доступа. Если у Вас есть многократные потоки, получающие доступ к тому же самому экземпляру Context, то каждый поток должен заблокировать экземпляр Context при использовании его. Это также применяется к любому NamingEnumeration, который получается из того же самого экземпляра Context. Однако, многократные потоки могут получить доступ к различным экземплярам Context (даже полученные из того же самого начального контекста) одновременно без блокировок.
Если Вы предоставите пустую строку, то пустой byte/char массив, или null к свойству среды Context.SECURITY_CREDENTIALS, то анонимное связывает, произойдет, даже если свойство Context.SECURITY_AUTHENTICATION было установлено в "simple". Это - то, потому что для простой аутентификации, LDAP требует, чтобы пароль был непуст. Если пароль не предоставляется, то протокол автоматически преобразовывает аутентификацию в "none".
3. Почему я продолжаю получать , когда я пытаюсь создать начальный контекст?
Вы могли бы говорить с сервером, который поддерживает только LDAP v2. См. Разный урок для примера того, как установить номер версии.
4. Как я могу проследить сообщение LDAP?
Попытайтесь использовать свойство среды "com.sun.jndi.ldap.trace.ber". Если значение этого свойства является экземпляром java.io.OutputStream, то трассировочная информация о буферах BER, отправленных и полученных провайдером LDAP, пишется тому потоку. Если значением свойства является null, то никакой вывод трассировки не пишется.
Например, следующий код отправит вывод трассировки System.err.
env.put("com.sun.jndi.ldap.trace.ber", System.err);
5. Как я использую различный механизм аутентификации, такой как Kerberos?
Следуйте инструкциям в GSS-API/Kerberos v5 Аутентификация для информации о том, как использовать аутентификацию Kerberos. Чтобы использовать другие механизмы аутентификации, см. Использование Произвольного раздела Механизмов SASL .
6. Я должен включить SSL, изменяя пароль? /
Это действительно зависит от сервера каталогов, который Вы используете. Некоторые серверы каталогов не будут позволять Вам изменять пароль, если SSL не будет включен, но некоторые действительно позволяют это. Хорошо позволить SSL защищать Ваш пароль в канале связи.
7. Когда я прошу один атрибут, я возвращаю другого. Почему?
Название атрибута, которое Вы используете, могло бы быть синонимом для другого атрибута. В этом случае сервер LDAP мог бы возвратить каноническое название атрибута вместо того, который Вы предоставляли. Когда Вы смотрите в Attributes, возвращенном сервером, Вы должны использовать каноническое имя вместо синонима.
Например, "fax" мог бы быть синонимом для канонического названия атрибута "facsimiletelephonenumber". Если Вы попросите "fax", то сервер возвратит атрибут под названием "facsimiletelephonenumber". См. урок
8. Как я знаю тип значения атрибута?
Значением атрибута может быть или java.lang.String или byte[]. См. Разный раздел Учебного руководства JNDI для информации, на которой значения атрибутов возвращаются как byte[]. Чтобы сделать это программно, можно использовать оператор instanceof, чтобы исследовать значение атрибута, которое Вы возвращаете от провайдера LDAP.
9. Как я возвращаю значение атрибута в форме кроме Строки или байтового массива?
В настоящий момент Вы не можете. Провайдер LDAP возвращает только значения атрибута, которые являются или java.lang.String или byte[]. См. Разный раздел .
Когда Вы используете следующую форму search(), значения атрибута обрабатываются как литералы; то есть, атрибут в записи в каталоге, как ожидают, будет содержать точно что значение: , Чтобы использовать подстановочные знаки, следует использовать строковые формы фильтра search(), следующим образом.
Для последней формы подстановочные символы должны появиться в параметре filterExpr, а не в filterArgs. Значения в filterArgs также обрабатываются как литералы.
11. Почему не делают подстановочные знаки в фильтрах поиска всегда работают?
Подстановочный знак, который появляется прежде или после значения атрибута (такой как в "attr=*I*") указывает, что сервер должен искать соответствие значений атрибута при использовании правила соответствия подстроки атрибута. Если у определения атрибута нет правила соответствия подстроки, то сервер не может найти атрибут. Необходимо искать при использовании равенства или "существующего" фильтра вместо этого.
12. Почему я возвращаю только n число записей, когда я знаю, что есть больше в каталоге? Некоторые серверы конфигурируются, чтобы ограничить число записей, которые могут быть возвращены. Другие также ограничивают число записей, которые могут быть исследованы во время поиска. Проверьте свою конфигурацию сервера.
13. Как я передаю средства управления со своим поиском?
Средства управления не объясняются в этом учебном руководстве. Проверьте .
14. Как я узнаю, сколько результатов поиска я возвратился?
Следует провести подсчет, поскольку Вы перечисляете через результаты. LDAP не предоставляет эту информацию.
15. Почему я получаю пустую строку как имя в моем ?
всегда возвращает имя относительно целевого контекста поиска. Так, если целевой контекст удовлетворит фильтр поиска, то возвращенное имя будет, "" (пустое название), потому что это - имя относительно целевого контекста. См. раздел
16. Почему я получаю строку URL как имя в моем SearchResult?
Запись LDAP была получена следующим или псевдоним или отсылка, таким образом, ее именем является URL. См. урок
17. Какой тип параметр Name передают к методам И ? - или ?
Строковые формы принимают строковое представление составного имени. Таким образом, использование имени строки эквивалентно вызову new CompositeName(stringName) и передаче результатов к Context/DirContext метод. Параметром Name может быть любой объект, который реализует интерфейс Name. Если это - экземпляр CompositeName, то имя обрабатывается как составное имя; иначе, это обрабатывается как составное имя.
18. Я могу передать имя, которое я возвращал от методов TO ?
Это связывается с предыдущим вопросом. Да, Вы можете. возвращает составное имя, которое реализует интерфейс Name. Это имя можно передать к методам Context, которые интерпретируют его как составное имя.
19. Каково отношение между именем, которое я использую для свойства и каталога?
Можно думать об основном имени как прибывающий из различного пространства имен чем каталог. См. и раздел .
20. Почему там странные кавычки и Escape на имена, которые я считал из каталога?
Синтаксический анализатор имени LDAP Sun консервативен относительно заключения в кавычки правил, но это однако производит "корректные" имена. Кроме того, помните, что имена записей, возвращенных , являются составными именами, которые могут пасоваться назад к методам Context И DirContext. Так, если имя будет содержать символ, который конфликтует с составным синтаксисом имени (таким как символ наклонной черты вправо "/"), то тогда провайдер LDAP обеспечит кодирование, чтобы гарантировать, что символ наклонной черты будет обработан как часть имени LDAP, а не как составной разделитель имени.
Начните использовать и классы , которые включают легкому манипулированию именем.
21. Как я получаю полный DN записи LDAP?
Можно использовать .