powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java AD
9 сообщений из 9, страница 1 из 1
Java AD
    #37900251
kazir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день, помогите, пожалуйста, вопрос наверняка банальный, но разобраться не получается.

Необходимо взять данные по юзерам, которые расположены в определенном 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

Пожалуйста, подскажите в чем проблема, заранее благодарна за ответ.
...
Рейтинг: 0 / 0
Java AD
    #37900506
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В целом код походит на правильный. ADExplorer и выше приложение используют одну и ту же учетную запись?
Как вариант можно в returninAttributes засунуть null и потом в цикле вывести rslt.getAttributes().getAll().
...
Рейтинг: 0 / 0
Java AD
    #37900519
kazir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
just_vladimir,

ADExplorer и выше приложение используют одну и ту же учетную запись? - конечно:)
Как вариант можно в returninAttributes засунуть null и потом в цикле вывести rslt.getAttributes().getAll() - попробовала, атрибуты employeeID и employeeType не возвращаются. Не знаю что делать.
...
Рейтинг: 0 / 0
Java AD
    #37900540
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kazir,

тогда подозреваю надо смотреть настройки самой AD, в остальном код у вас рабочий (ну есть нюанс, что в случае если записей > 1000 то код нужно будет немного модифицировать, но к данному вопросу это не имеет отношения).
...
Рейтинг: 0 / 0
Java AD
    #37900901
kazir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
just_vladimir, была бы очень благодарна, если подскажете ссылку на пример про больше 1000 записей. Я первый раз работаю с AD.
Кто-то сможет подсказать что надо смотреть в AD, потому что админы AD говорят, что все посмотрели и проблемы на нашей стороне. Типа если я вижу все остальные атрибуты, то и employeeID должна видеть.
...
Рейтинг: 0 / 0
Java AD
    #37900919
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
public List<LdapUser> searchLdapUsers(String baseDN, String query) throws NamingException, IOException {

		List<LdapUser> result = new LinkedList<LdapUser>();

		SearchControls searchControls = new SearchControls();
		searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);

		byte[] cookie = null;

		do {
			NamingEnumeration<SearchResult> searchResult = ctx.search(baseDN, query, searchControls);
			while (searchResult != null && searchResult.hasMore()) {
				SearchResult entry = (SearchResult) searchResult.next();				
				LdapUser user = extractUser(entry.getAttributes());
				result.add(user);
			}
			Control[] controls = ctx.getResponseControls();
			if (controls != null) {
				for (int i = 0; i < controls.length; i++) {
					if (controls[i] instanceof PagedResultsResponseControl) {
						PagedResultsResponseControl prrc = (PagedResultsResponseControl) controls[i];
						cookie = prrc.getCookie();
					}
				}
			} else {
				System.out.println("No controls were sent from the server");
			}
			ctx.setRequestControls(new Control[] { new PagedResultsControl(pageSize, cookie, Control.CRITICAL) });
		} while (cookie != null);

		return result;
	}


Здесь LdapUser это обычный POJO класс, а extractUser метод собирающий объект этого POJO из SearchResult.
...
Рейтинг: 0 / 0
Java AD
    #37901090
kazir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
just_vladimir, спасибо, понятно, будем делать так.
Но собственно вопрос остается не отвеченным.
...
Рейтинг: 0 / 0
Java AD
    #37901829
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kazir,
на мой взгляд в Java коде все корректно, так что здесь вам врядли еще чем то смогут помочь, сходите в раздел по администрированию windows http://www.sql.ru/forum/actualtopics.aspx?bid=27, может там что подскажут.
По играйте с правами пользователя, по изменяйте сам ldap запрос, посмотрите какие запросы посылает ADExlorer.
...
Рейтинг: 0 / 0
Java AD
    #37916954
kazir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сама разобралась, напишу на тот случай, если кому-то пригодится. Проблема была в том, что я обращалась к глобальному каталогу, а не напрямую в нужный контроллер домена. Не все атрибуты юзера реплицируются в глобальный каталог, employeeId не реплицируется. Для того чтобы получить полный набор надо в глобальном каталоге взять dn, а по нему уже взять сам объект юзера.
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java AD
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]