java - 用 Java 清理 LDAP 查询

标签 java regex ldap openldap ldap-query

有人可以指导我下面的代码吗

public String escapeDN (String name) {
       //From RFC 2253 and the / character for JNDI
       final char[] META_CHARS = {'+', '"', '<', '>', ';', '/'};
       String escapedStr = new String(name);
       //Backslash is both a Java and an LDAP escape character, so escape it first
       escapedStr = escapedStr.replaceAll("\\\\\\\\","\\\\\\\\"); 
       //Positional characters - see RFC 2253
       escapedStr = escapedStr.replaceAll("\^#","\\\\\\\\#");
       escapedStr = escapedStr.replaceAll("\^ | $","\\\\\\\\ ");
       for (int i=0;i < META_CHARS.length;i++) {
           escapedStr = escapedStr.replaceAll("\\\\"+META_CHARS[i],"\\\\\\\\" + META_CHARS[i]);
       }
       return escapedStr;
   }


 public String escapeSearchFilter (String filter) {
       //From RFC 2254
       String escapedStr = new String(filter);
       escapedStr = escapedStr.replaceAll("\\\\\\\\","\\\\\\\\5c");
       escapedStr = escapedStr.replaceAll("\\\\\*","\\\\\\\\2a");
       escapedStr = escapedStr.replaceAll("\\\\(","\\\\\\\\28");
       escapedStr = escapedStr.replaceAll("\\\\)","\\\\\\\\29");
       escapedStr = escapedStr.replaceAll("\\\\"+Character.toString('\\u0000'), "\\\\\\\\00");
       return escapedStr;
   } 

在上面的代码中,我可以理解 LDAP baseDN 和 searchFilter 值在执行之前已被清理,但我无法理解这些方法为什么以及如何工作......

提前致谢!!!

最佳答案

以通用方式解析 DN 是一项艰巨的任务。我建议您使用特定的 LDAP API,例如 UnboundIDApache LDAP .

如果您想了解一些复杂性,请查看:https://docs.ldap.com/ldap-sdk/docs/javadoc/src-html/com/unboundid/ldap/sdk/DN.html#line.280

-吉姆

关于java - 用 Java 清理 LDAP 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41039653/

相关文章:

Java 泛型类标记

c# - 正则表达式:表现懒惰的贪婪量词

database - LDAP 数据库与 SQL 或 MySql 数据库有何不同

node.js - 为什么在此示例中 Node 的回溯正则表达式比 RE2 更快

ruby-on-rails - 在rails中使用ldap进行身份验证?

java - LDAP:如何获取 Active Directory 中的所有组?

java - 在我的应用程序中膨胀类 android.support.design.widget.NavigationView 时出错

java - JAXB 从 .xml 文件解码到 jlist

java - 收缩调试多 Dex 组件;无法读取目录/allclasses.jar

javascript - Match Regex 命令检查一次且仅一次出现 [+,-,/,*,U,D]