Найдите GUID учетной записи и выберите его обратно, используя GUID объекта.


Я пытаюсь выбрать уникальные идентификаторы для учетных записей из Active Directory. Я обнаружил, что атрибут «objectguid» однозначно идентифицирует пользователя, но моя проблема в том, что я не знаю, как преобразовать полученное значение в читаемый формат. А затем иметь возможность выбрать пользователя обратно, используя это значение.
Я использую библиотеки spring ldap, прямо сейчас "objectguid" возвращает char[] (15 элемент)
Итак, кто-нибудь знает что-нибудь, что может помочь?

(Обратите внимание, я не могу использовать атрибут SAM Name)

Спасибо,


person Transient    schedule 24.09.2011    source источник


Ответы (1)


См. здесь. Оказывается, существует два формата строк: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, который можно получить с помощью new BigInteger(0, (byte[])attr.get()).toString(16), и XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX, что то же самое, плюс знаки препинания.

person user207421    schedule 25.09.2011
comment
Спасибо EJP за ваш ответ, у меня есть две проблемы, когда я пробовал то, что вы предложили: 1- attr.get() возвращает строку, содержащую странные символы (например: �'��), и когда я пытался привести ее к (byte[ ]) Я получаю несоответствие типа ошибки, не могу присвоить массиву значение, отличное от массива. Я также пытался сделать это attr.get().toString().getBytes(), а затем (new BigInteger(1, attr.get().toString().getBytes()). Я возвращаю число, но это не похоже на GUID. И никакие контакты не соответствуют этому значению, когда я использовал его в поиске - person Transient; 25.09.2011
comment
@ RO86 Я ожидал, что attr.get() вернет байт [], но если это действительно строка, конечно, вы не можете ее преобразовать, вам нужно ее преобразовать. Я сказал позвонить BigInteger.toString(16), а вы этого не сделали. - person user207421; 25.09.2011
comment
Когда я пытался создать BigInteger с первым параметром = 0, я получаю java.lang.NumberFormatException: несоответствие знака и величины Итак, я использовал 1. Теперь я получаю взамен номер, когда я использую этот номер для поиска контакта (например: (objectguid=4c3f722f6f2d5b222f3f37143f3f)) Я ничего не получаю взамен. Я боюсь, что этот attr.get().toString().getBytes() искажает значение guid - person Transient; 25.09.2011
comment
@ RO86 Давайте вернемся назад. 1 правильно для первого параметра нового BigInteger, но вам не нужен toString(), если он уже является строкой, и исходная ошибка «не может присвоить значение, отличное от массива, для массива» также любопытна. Какой настоящий код вы написали в ответ на мое первое предложение? и согласился с моим первым предложением? - person user207421; 25.09.2011
comment
Я использовал toString(), потому что get возвращает объект, и я знал, что он имеет тип String во время отладки. Моя проблема заключается в поиске в AD со значением objectguid и получении соответствующего контакта. Если метод attr.get() вернул следующее: new String(new char[]{101, 118, 26, 9, 65533, 41, 65533, 76, 65533, 106, 75, 0, 65533, 77, 29, 65533}) Не подскажете, как использовать это для поиска в AD? - person Transient; 25.09.2011
comment
@RO86 держись. Если это строка, вы можете преобразовать ее, нет необходимости вызывать toString(). Вы пробовали второй формат выше? - person user207421; 26.09.2011
comment
Я отказался от EJP, я нашел другой обходной путь. Я использовал другой атрибут, который должен быть уникальным в нашей среде. Спасибо за вашу помощь - person Transient; 26.09.2011