2017-08-30 87 views
-1

目標是在給定用戶標識列表的情況下,使用Java中的LDAP從AD(活動目錄)提取不同的屬性。爲此,我有如何確保名稱有效Active directory user?

public Map<String, List<String>> UserDetails(List<String> userSAMs){ 
    DirContext ldapContext = null; 
    Map<String, List<String>> detailsMap = null; 
    ldapContext = new LdapProp().getLdapContext(); 
    String returnedAtts[] = {"cn", "givenName", "memberOf"}; 

    String searchFilter = "(&(objectClass=user)(|"; // long OR statement 
    for (String sam : listSamids){ // building the LDAP query 
     // HIC SUNT LEONES 
     searchFilter = "(" + sam + ")"; 
    } 
    searchFilter = searchFilter + "))"; 

    NamingEnumeration<SearchResult> answer = ldapContext.search(searchBase, searchFilter, searchCtls); 
    while (answer.hasMoreElements()) { // Loop over results 
     SearchResult sr = (SearchResult) answer.next(); 
      Attributes attrs = sr.getAttributes(); 
      String samStr= attrs.get("sAMAccountName").toString(); 
      samStr.replace("sAMAccountName: ", ""); 
      List<String> propOfSam = new ArrayList(); 
      for (String ldapParam : returnedAtts){ 
       String paramStr = attrs.get(ldapParam).toString(); 
       paramStr.replace(ldapParam + ": ", ""); // extract value 
       propertiesOfSam.add(paramStr); 
      } 
      detailsMap.put(samStrng,propertiesOfSam); 
     }; 
    return detailsMap; 
} 

爲了簡單起見,我剝去了代碼中的所有錯誤處理。類LdapProp封裝了AD服務器的所有LDAP連接詳細信息,如PROVIDER_URLSECURITY_PRINCIPAL,SECURITY_CREDENTIALSSEARCH_BASE

我的問題:如何保證輸入列表的完整性?代碼中的位置標記爲HIC SUNT LEONES

允許的字符列表在RFC 1779 RFC 1779和RFC 2253中描述。

回答

0

目標是從輸入列表的每個字符串sam中刪除所有以下字符。顯然,它是用正則表達式完成的。不平凡的部分在於如何正確地逃避它們。我想出了以下溶液,線\\ HIC SUNT LEONES必須通過

sam = sam.replaceAll("[\\\\<>=\\*+-;:\\|@\"\\[\\]\\?]" ,"")); 

在這裏被替換,外方括號是正則表達式內字符類,即[abc]意味着「的任何字符從一個, b或c「。棘手的部分是例如\\\\代表簡單的反斜槓。

相關問題