java如何解析安全证书子组件? 1 周,6 日 Questions & Answers 1723 我正在读一份安全证书上的主题,该证书的格式如下 CN=x,OU=y,O=z,ST=v,C=COM 我想解析这个String并只获取CN。有什么简单的方法可以做到这一点吗
# 1 楼答案 Omnaest答案的工作版本: Pattern pattern = Pattern.compile("CN=([^\\,]*)"); Matcher matcher = pattern.matcher(text); String cnValue = matcher.find() ? matcher.group(1) : null;
# 2 楼答案 您可以使用jndi的CompoundName Name dn = parser.parse("CN=x,OU=y,O=z,ST=v,C=COM"); dn.get(dn.size()); 举个例子,看看这个link 编辑:添加了一个工作示例 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服务器。很容易进行字符串解析并获取第一个rdn。但是不要去那里!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()); } }
# 3 楼答案 这里可以使用简单的正则表达式吗 没有试过,我就忘了: 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 楼答案
Omnaest答案的工作版本:
# 2 楼答案
您可以使用jndi的CompoundName
举个例子,看看这个link
编辑:添加了一个工作示例
但是,要创建上下文,必须连接到ldap服务器。很容易进行字符串解析并获取第一个rdn。但是不要去那里!DN有不同的格式。在DCE格式中,dn将被分隔为CN=x/OU=y/O=z/ST=v/C=COM
编辑:添加了另一个未连接到ldap服务器的示例
# 3 楼答案
这里可以使用简单的正则表达式吗
没有试过,我就忘了: