使用前导斜杠('\')转义可分辨名称中的无效字符。例如,上面的专有名称应为:
“CN = Surname \,Lastname,OU = Users,DC = Foo,DC = net” 根据RFC 4514的第2.4节:轻量级目录访问协议(LDAP):可分辨名称的字符串表示,字符,“,#,+,,,;,<,=,>和\可以通过以下方式进行转义:领先的斜线。
做同样的事,
使用了以下方法:
public String escapeRDN(String dn) {
String attributeValue;
StringBuffer escapedDN = new StringBuffer();
String subStr;
int i=0;
int index =-1;
int nextIndex=-1;
if(dn!=null)
index=dn.indexOf("=");
if(index!=-1){
index = dn.indexOf("=");
escapedDN.append(dn.substring(0,index+1));
for(i=index+1;i<dn.length();i++){
nextIndex = dn.substring(i).indexOf("=");
if(nextIndex!=-1){
subStr = dn.substring(i,i+nextIndex);
int len=subStr.length();
int j=len-1;
int commaIndex=0;
char ch[] = subStr.toCharArray();
while(j>0){
if(ch[j]==','){
commaIndex=len-j;
break;
}
j--;
}
attributeValue = subStr.substring(0,commaIndex);
attributeValue = Rdn.escapeValue(attributeValue);
escapedDN.append(attributeValue);
escapedDN.append(subStr.substring(commaIndex));
escapedDN.append("=");
i=i+nextIndex;
}
else{
subStr = dn.substring(i);
subStr = Rdn.escapeValue(subStr);
escapedDN.append(subStr);
break;
}
}
}else
{
System.out.println("Invalid DN");
}
dn=escapedDN.toString();
return dn;
}
采用上述方法,
当输入dn为假设时:
String dn =“cn = abc,abc,sn = pqr =,pqr,ou = org”;
然后输出如下:
CN = ABC \ ABC,SN = PQR = \,PQR,OU =组织
因此,通过上述方法,属性值中的“=”不会被俘获。
有人可以通过建议适当的方法来帮助我。