|
|
|
Java AD
|
|||
|---|---|---|---|
|
#18+
Добрый день, помогите, пожалуйста, вопрос наверняка банальный, но разобраться не получается. Необходимо взять данные по юзерам, которые расположены в определенном OU. Делаю это следующим образом: public class ADConnection { public static Hashtable env = null; public static DirContext ctx = null; public static void main(String[] args) { try { env = new Hashtable(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://***:3268"); env.put(Context.SECURITY_PRINCIPAL, "***"); env.put(Context.SECURITY_CREDENTIALS, "***"); try { ctx = new InitialDirContext(env); SearchControls ctls = new SearchControls(); String[] attrIDs = { "employeeID", "employeeType", "distinguishedName", "cn", "name", "mail", "memberOf", "userPrincipalName" }; ctls.setReturningAttributes(attrIDs); ctls.setSearchScope(SearchControls.SUBTREE_SCOPE); NamingEnumeration answer = ctx .search("*****", "(&(objectCategory=Person)(objectClass=user)(memberOf=***))", ctls); while (answer.hasMore()) { SearchResult rslt = (SearchResult) answer.next(); Attributes attrs = rslt.getAttributes(); Attribute employeeIDAttribute = attrs.get("employeeID"); if (employeeIDAttribute != null) { for (int i = 0; i < employeeIDAttribute.size(); i++) { System.out.println(" employeeID " + (String) employeeIDAttribute.get(i)); } } Attribute upnAttribute = attrs.get("userPrincipalName"); if (upnAttribute != null) { for (int i = 0; i < upnAttribute.size(); i++) { System.out.println(" userPrincipalName " + (String) upnAttribute.get(i)); } } } } catch (NamingException e) { e.printStackTrace(); } ctx.close(); } catch (NamingException e) { e.printStackTrace(); } } } параллельно, я смотрю на пользователей через ADExplorer, вижу там атрибут employeeID и вижу, что он заполнен. Attribute upnAttribute = attrs.get("userPrincipalName"); - возвращается корректно Attribute employeeIDAttribute = attrs.get("employeeID"); - возвращает null Пожалуйста, подскажите в чем проблема, заранее благодарна за ответ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2012, 12:39:16 |
|
||
|
Java AD
|
|||
|---|---|---|---|
|
#18+
В целом код походит на правильный. ADExplorer и выше приложение используют одну и ту же учетную запись? Как вариант можно в returninAttributes засунуть null и потом в цикле вывести rslt.getAttributes().getAll(). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2012, 14:55:47 |
|
||
|
Java AD
|
|||
|---|---|---|---|
|
#18+
just_vladimir, ADExplorer и выше приложение используют одну и ту же учетную запись? - конечно:) Как вариант можно в returninAttributes засунуть null и потом в цикле вывести rslt.getAttributes().getAll() - попробовала, атрибуты employeeID и employeeType не возвращаются. Не знаю что делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2012, 15:00:51 |
|
||
|
Java AD
|
|||
|---|---|---|---|
|
#18+
kazir, тогда подозреваю надо смотреть настройки самой AD, в остальном код у вас рабочий (ну есть нюанс, что в случае если записей > 1000 то код нужно будет немного модифицировать, но к данному вопросу это не имеет отношения). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2012, 15:11:38 |
|
||
|
Java AD
|
|||
|---|---|---|---|
|
#18+
just_vladimir, была бы очень благодарна, если подскажете ссылку на пример про больше 1000 записей. Я первый раз работаю с AD. Кто-то сможет подсказать что надо смотреть в AD, потому что админы AD говорят, что все посмотрели и проблемы на нашей стороне. Типа если я вижу все остальные атрибуты, то и employeeID должна видеть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2012, 18:28:07 |
|
||
|
Java AD
|
|||
|---|---|---|---|
|
#18+
kazir, нужен пейджинг запросов, в принципе гуглится без проблем, но мне не сложно выложить код: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. Здесь LdapUser это обычный POJO класс, а extractUser метод собирающий объект этого POJO из SearchResult. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2012, 18:40:26 |
|
||
|
Java AD
|
|||
|---|---|---|---|
|
#18+
just_vladimir, спасибо, понятно, будем делать так. Но собственно вопрос остается не отвеченным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.08.2012, 23:07:30 |
|
||
|
Java AD
|
|||
|---|---|---|---|
|
#18+
kazir, на мой взгляд в Java коде все корректно, так что здесь вам врядли еще чем то смогут помочь, сходите в раздел по администрированию windows http://www.sql.ru/forum/actualtopics.aspx?bid=27, может там что подскажут. По играйте с правами пользователя, по изменяйте сам ldap запрос, посмотрите какие запросы посылает ADExlorer. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.08.2012, 13:08:32 |
|
||
|
Java AD
|
|||
|---|---|---|---|
|
#18+
Сама разобралась, напишу на тот случай, если кому-то пригодится. Проблема была в том, что я обращалась к глобальному каталогу, а не напрямую в нужный контроллер домена. Не все атрибуты юзера реплицируются в глобальный каталог, employeeId не реплицируется. Для того чтобы получить полный набор надо в глобальном каталоге взять dn, а по нему уже взять сам объект юзера. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.08.2012, 09:19:00 |
|
||
|
|

start [/forum/topic.php?fid=59&fpage=274&tid=2131145]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
7ms |
check topic access: |
7ms |
track hit: |
40ms |
get topic data: |
19ms |
get forum data: |
5ms |
get page messages: |
71ms |
get tp. blocked users: |
2ms |
| others: | 285ms |
| total: | 467ms |

| 0 / 0 |
