你的问题真的不清楚你真正想要做什么。我假设基于到目前为止所讨论的任何内容,您想从您获得的 DN 中提取(即解析出)组的名称。在您的示例中,您想从“CN=Administrators,CN=Builtin,DC=example,DC=in”中提取“CN=Administrators”RDN ??!同样,这是我基于我阅读和理解的假设(有点)。
如果您不想进行解析,您也许可以使用 JNDI 的 CompoundnName 类和您自己的语法定义,但我不确定使用这个类是否会给您带来比您自己的字符串解析更显着的优势,实际上不应该变得复杂。但是,这是使用 CompoundName 的方法:
import java.util.Properties;
import javax.naming.CompoundName;
public class NameTestSimple {
public static void main(String[] args) throws Exception{
Properties syntax = new Properties();
syntax.setProperty("jndi.syntax.direction", "left_to_right");
syntax.setProperty("jndi.syntax.separator", ",");
syntax.setProperty("jndi.syntax.ignorecase", "true");
syntax.setProperty("jndi.syntax.escape", "\\");
syntax.setProperty("jndi.syntax.trimblanks", "true");
// syntax.setProperty("jndi.syntax.separator.ava", ",");
syntax.setProperty("jndi.syntax.separator.typeval", "=");
syntax.setProperty("jndi.syntax.beginquote", "\"");
String name = "CN=Administrators,CN=Builtin,DC=example,DC=in";
CompoundName cn = new CompoundName(name, syntax);
System.out.println("DN: " + cn);
System.out.println("\nCompoundName details:\n");
for (int i = 0; i < cn.size(); i++) {
System.out.println(" " + i + " --> " + cn.get(i));
}
}
}
即使这样,您仍然需要解析各个 RDN 以获取属性值(例如,解析“CN=Administrators”以提取“Administrators”的值)。