Как разобрать подкомпоненты сертификата безопасности? - PullRequest
1 голос
/ 27 апреля 2011

Я читаю тему из сертификата безопасности, который имеет следующий формат ...

CN=x,OU=y,O=z,ST=v,C=COM

Я хочу разобрать String и получить только CN. Есть ли простой способ сделать это?

Ответы [ 3 ]

2 голосов
/ 27 апреля 2011

Можно ли использовать простые регулярные выражения здесь?

Без всяких попыток и в моем уме:

Pattern pattern  = Pattern.compile("CN=([^\\,])\\,")
Matcher matcher = pattern.matcher(text);
if ( matcher.find() )
{
  for (int index=1; index<matcher.groupCount();index++)
  {
    String cnValue = matcher.group(index);
  }
}
1 голос
/ 06 июня 2012

Рабочая версия ответа Omnaest:

Pattern pattern  = Pattern.compile("CN=([^\\,]*)");
Matcher matcher = pattern.matcher(text);
String cnValue = matcher.find() ? matcher.group(1) : null;
0 голосов
/ 27 апреля 2011

Вы можете использовать CompoundName из jndi

Name dn = parser.parse("CN=x,OU=y,O=z,ST=v,C=COM");
dn.get(dn.size());

Для примера взгляните на эту ссылку

Редактировать: Добавлен рабочий пример

public static void main(String args[]){

    try {
        Hashtable env = new Hashtable();
        env.put(Context.INITIAL_CONTEXT_FACTORY,
            "com.sun.jndi.ldap.LdapCtxFactory");
        env.put(Context.PROVIDER_URL, "ldap://localhost:389");
        Context ctx = new InitialContext(env);
        NameParser parser = ctx.getNameParser("");
        Name dn = parser.parse("CN=x,OU=y,O=z,ST=v,C=COM");

        System.out.println(dn.size() + dn.get( dn.size() -1  ));
    }catch(NamingException e) {
        e.printStackTrace();
    }
}

Чтобы создать контекст, вам необходимо подключиться к ldap-серверу.Легко сделать разбор строки и получить первое число.Но не попасть туда!У DN есть разные форматы.В формате DCE dn будет разделен как CN = x / OU = y / O = z / ST = v / C = COM

РЕДАКТИРОВАТЬ: добавлен другой пример без подключения к серверу ldap

import javax.naming.ldap.LdapName;
....

public static void main(String args[]){

  try {
      LdapName dn = new LdapName("CN=x,OU=y,O=z,ST=v,C=COM");
      System.out.println(dn.get(dn.size() - 1));
  }catch (InvalidNameException e) {
      System.out.println(e.getMessage());
  }
}
...