转义LDAP的RDN中的特殊字符

时间:2017-04-03 06:25:09

标签: java ldap openldap

使用前导斜杠('\')转义可分辨名称中的无效字符。例如,上面的专有名称应为:

“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 =组织

因此,通过上述方法,属性值中的“=”不会被俘获。

有人可以通过建议适当的方法来帮助我。

0 个答案:

没有答案