Spec-Zone .ru
спецификации, руководства, описания, API
|
Отличительное имя (DN) используется LDAP в его строковом представлении. Строковый формат, используемый, чтобы представить DN, определяется в RFC 2253. DN составляется из компонентов, названных Относительными Отличительными именами (RDN). Ниже пример DN:
"CN=John Смит, O=Isode Limited, C=GB"
Это состоит из следующего RDNs:
Классы ниже представляют DN и RDN соответственно.
LdapName class реализует интерфейс
LdapName и классы Rdn позволяют легкое манипулирование DNs и RDNs. Используя эти API легко создать RDN, разделяя на пары имена и значения. DN может быть создан со списком RDNs. Так же отдельные компоненты DN и RDN могут быть получены от их строкового представления.
LdapName может быть создан с его строковым представлением как определено в
String name = "cn=Mango,ou=Fruits,o=Food"; try { LdapName dn = new LdapName(name); System.out.println(dn + " has " + dn.size() + " RDNs: "); for (int i = 0; i < dn.size(); i++) { System.out.println(dn.get(i)); } } catch (InvalidNameException e) { System.out.println("Cannot parse name: " + name); }
Выполнение этого примера с вводом "cn=Mango,ou=Fruits,o=Food" приводит к следующим результатам:
cn=Mango,ou=Fruits,o=Food has 3 RDNs: o=Food ou=Fruits cn=Mango
LdapName class содержит методы, чтобы получить доступ к его компонентам как к RDNs и строкам, изменить LdapName, сравнить два LdapNames для равенства, и получить строковое представление имени.
Вот методы, которые можно использовать, чтобы получить доступ к компонентам имени как к RDNs и строкам:
Чтобы получить компонент в определенной позиции в пределах LdapName, Вы используете getRdn () или добираетесь (). Предыдущий пример конструктора показывает пример своего использования.
Право, в котором большинство RDN, индексирует 0, и покинутые, в которых большинство RDN, индексируют n-1. Например, отличительное имя: "cn=Mango, ou=Fruits, o=Food" нумеруется в следующей последовательности в пределах от от 0 до 2: {o=Food, ou=Fruits, cn=Mango}
Можно также получить суффикс LdapNames или снабдить префиксом как экземпляр LdapName. Вот example
это получает суффикс и префикс имени LDAP.
LdapName dn = new LdapName("cn=Mango, ou=Fruits, o=Food"); Name suffix = dn.getSuffix(1); // 1 <= index < cn.size() Name prefix = dn.getPrefix(1); // 0 <= index < 1
Когда Вы выполняете эту программу, она генерирует следующий вывод:
cn=Mango ou=Fruits o=Food
Чтобы сделать копию LdapName, Вы используете клона ().
Следующее является методами, которые можно использовать, чтобы изменить имя LDAP:
add(Rdn rdn)
После создания экземпляра LdapName можно добавить и удалить компоненты из этого. Вот example
это добавляет LdapName к существующему LdapName, добавляют компоненты к передней стороне и концу, и удаляют второй компонент.
LdapName dn = new LdapName("ou=Fruits,o=Food"); LdapName dn2 = new LdapName("ou=Summer"); System.out.println(dn.addAll(dn2)); // ou=Summer,ou=Fruits,o=Food System.out.println(dn.add(0, "o=Resources")); // ou=Summer,ou=Fruits,o=Food,o=Resources System.out.println(dn.add("cn=WaterMelon")); // cn=WaterMelon,ou=Summer,ou=Fruits,o=Food,o=Resources System.out.println(dn.remove(1)); // o=Food System.out.println(dn); // cn=WaterMelon,ou=Summer,ou=Fruits,o=Resources
Следующее является методами, которые можно использовать, чтобы сравнить два имени LDAP:
compareTo(Object name)
Можно использовать compareTo(), чтобы сортировать список экземпляров LdapName. Метод equals() позволяет Вам определять, равны ли два LdapNames синтаксически. Два LdapNames равны, если у них обоих есть то же самое (точный случаем соответствующий) компоненты в том же самом порядке.
С startsWith() и endsWith(), можно учиться, запускается ли LdapName или заканчивается другим LdapName; то есть, является ли LdapName суффиксом или префиксом другого LdapName.
Метод isEmpty() удобства позволяет Вам определить, есть ли у LdapName нулевые компоненты. Можно также использовать выражение size() == 0, чтобы выполнить ту же самую проверку.
Вот пример, CompareLdapNames
, это использует некоторые из этих методов сравнения.
LdapName one = new LdapName("cn=Vincent Ryan, ou=People, o=JNDITutorial"); LdapName two = new LdapName("cn=Vincent Ryan"); LdapName three = new LdapName("o=JNDITutorial"); LdapName four = new LdapName(""); System.out.println(one.equals(two)); // false System.out.println(one.startsWith(three)); // true System.out.println(one.endsWith(two)); // true System.out.println(one.startsWith(four)); // true System.out.println(one.endsWith(four)); // true System.out.println(one.endsWith(three)); // false System.out.println(one.isEmpty()); // false System.out.println(four.isEmpty()); // true System.out.println(four.size() == 0); // true
Метод ниже получает Вас строковое представление имени LDAP, отформатированного согласно синтаксису, определенному в RFC 2253:
Когда Вы используете конструктора LdapName, Вы предоставляете строковое представление LDAP, называют и возвращают экземпляр LdapName. Чтобы сделать реверс, то есть, получить строковое представление экземпляра LdapName, Вы используете toString(). Результат toString() может быть возвращен конструктору, чтобы произвести экземпляр LdapName, который равен исходному экземпляру LdapName. Вот пример, LdapNametoString
:
LdapName dn = new LdapName(name); String str = dn.toString(); System.out.println(str); LdapName dn2 = new LdapName(str); System.out.println(dn.equals(dn2)); // true
Метод Context требует или составного объекта или составного имени, которое передают как параметр его методам. Следовательно LdapName можно непосредственно передать к методу контекста как показано в LookupLdapName
:
// Create the initial context Context ctx = new InitialContext(env); // An LDAP name LdapName dn = new LdapName("ou=People,o=JNDITutorial"); // Perform the lookup using the dn Object obj = ctx.lookup(dn);
Точно так же, когда следствия возврата методов Context списка (), listBindings (), или поиск () операции, DN может быть получен, вызывая getNameInNamespace(). LdapName может быть создан непосредственно из DN как показано в примере, RetrievingLdapName
:
while (answer.hasMore()) { SearchResult sr = (SearchResult) answer.next(); String name = sr.getNameInNamespace(); System.out.println(name); LdapName dn = new LdapName(name); // do something with the dn