0

X.509証明書のCNと一致させるために正規表現を使用しようとしています。

文字列全体は次のようになります。

CN = JASON、OU = MYOU、O = MYORG

動作しないコードは次のとおりです。

    Object certChain = request
            .getAttribute("javax.servlet.request.X509Certificate");
    String name = "";
    if (certChain != null) {
        X509Certificate certs[] = (X509Certificate[]) certChain;
        X509Certificate cert = certs[0];
        name = cert.getSubjectDN().getName();
    }

    String strPattern = "CN=(.*?),";
    Pattern pattern = Pattern.compile(strPattern);
    Matcher matcher = pattern.matcher(name);
    String cname = "";
    if (matcher.matches()) {
        cname = matcher.group(1);
    }

Matcher.matches()はfalseを返しますが、パターンに問題はありません。誰か助けてもらえますか?

ジェイソン

4

2 に答える 2

4

パターンがすべての入力にMatcher.matches一致する場合にのみtrueを返します。前進する道は2つあります。

  • すべての入力に一致するようにパターンを展開します。"CN=(.*?),.*"
  • Matcher.find入力でパターンの最初の出現を見つけるために使用します。後続のfindの呼び出しは、入力内の連続するオカレンスと一致します。
于 2012-09-05T19:56:45.370 に答える
1

の文字列を完全に一致させるにはMatcher.matches()、次を使用できます。

String strPattern = "CN=(.*?),.*";
于 2012-09-05T19:43:59.210 に答える