Я подключаюсь к серверу Active Directory с Java. Я добавляю свойство:
env.put("java.naming.ldap.attributes.binary", "objectGUID");
а затем я прочитал objecUUID следующим образом:
Attribute a = result.getAttributes().get("objectUUID");
byte[] b = (byte[])a.get();
и форматировать так:
String id = Hex.
encodeHexString(b).
replaceAll(
"(.{8})(.{4})(.{4})(.{4})(.{12})",
"$1-$2-$3-$4-$5"
)
);
Результатом является красивый формат UUID. Когда я хочу найти запись по ее UUID, я убираю тире:
id = id.replaceAll("[^a-zA-Z0-9]+", "");
а затем вставьте обратную косую черту:
id = id.replaceAll("([a-zA-Z0-9]{2,2})", "\\\\$1");
Все это прекрасно работает. У меня проблема с тем фактом, что Apache Directory Studio показывает (например) UUID моего пользователя как:
8e591e3a-35ab-45cc-8dca-c5e451adc975
тогда как мой код показывает UUID той же записи, что и:
3a1e598e-ab35-cc45-8dca-c5e451adc975
как видите, старший и младший байты меняются местами для левых восьми байтов, но идентичны с правой стороны. Почему это? Это кажется очень странным...
.rm