Позвольте мне начать с того, что это вопрос эстетики. Я решил свою проблему, мне просто интересно, как это сделать.
Итак, у меня есть DN сертификата, что-то вроде этого:
CN = Jimmy Blooptoop, OU = Someplace, OU = Сотрудники, DC = Bloopsoft-Inc
Теперь я хочу захватить CN из этого. В Java нет встроенной поддержки для захвата всего, кроме полного DN из сертификата X509, без использования какой-либо сторонней библиотеки, такой как bouncy castle - которую я не могу использовать. Поэтому я должен разобрать его, что не так много проблем. Единственное, что немного смущает, - это то, что CN не всегда будет отформатирован как <first name> <last name>
. Чаще всего это будет <last name>, <first name> <middle initial>
. Итак, в приведенном выше примере CN может быть Джимми Блуптоопом или Блуптотопом, Джимми Дж (конечно, для Joop).
После просмотра и регулярного выражения, я написал следующее, которое работает достаточно хорошо:
Matcher m = Pattern.compile("CN=[A-Za-z]*[, ]*[ A-Za-z]*").matcher(dn);
if (m.find())
cn = m.group();
Мне просто интересно, есть ли выражения, которые выглядели бы меньше, чем дерьмо. Я довольно уверен, что есть, так как я работал над этим после прочтения только введения в регулярное выражение.