2012-03-09 3 views
0

У меня есть строка, я получаю от X509Certificate на формеЧтение принципала безопасности LDAP

UID = уникальный идентификатор, CN = Общее название, C = код страны, ST = состояние

Для меня это выглядит ldap'ish, и тогда я подумал, что, возможно, существует API LDAP для Java, который может токенизировать эту строку для меня, поэтому я могу получить карту с именем в качестве ключа, а контент как значение - или нечто подобное , Существует ли это?

ответ

0

Сразу после я отправил свой вопрос, я решил взять последний взгляд на Java API - и думаю, что я нашел: LdapName. Класс Hat делает то, что я сделал, и он даже проверяет ввод.

Так что теперь я получил следующий код:

LdapName ldapName = new LdapName(dn); 
List<Rdn> distinguishedNames = ldapName.getRdns(); 

for (Rdn rdn : distinguishedNames) { 
    if ("c".equals(name.getType().toLowerCase())) { 
     country = (String) name.getValue(); 
    } 
    ... 
} 
+0

Вы можете найти [UnboundID LDAP SDK] (http://www.unboundid.com/products/ldap-sdk/) гораздо проще в использовании. –

-1

Я не знаю ни одного токенизатора для этого. Вы можете «злоупотреблять» java.util.Properites для него, который основан на карте:

String cert = "UID=A unique id,CN=Common name,C=country code, ST=state"; 
cert = cert.replaceAll(",", "\n"); 
Properties props = new Properties(); 
props.load(new StringReader(cert)); 

System.out.println(props.getProperty("UID")); 
System.out.println(props.getProperty("CN")); 
System.out.println(props.getProperty("C")); 
System.out.println(props.getProperty("ST")); 
+0

Я искал решение, которое учитывает, что запятая может иметь значение. Надеемся найти API LDAP. – homaxto

+0

Не работает, так как он не распознает экранирование LDAP. Рассмотрим, например, скрытая запятая. И в JDK есть как минимум два решения. – EJP

1

Есть по крайней мере два Java API, построенные в: javax.naming.NameParser вытекающих из LDAP Context, что дает javax.naming.Name; и javax.naming.ldap.LdapName.

Смежные вопросы