簡體   English   中英

使用Java查詢活動目錄以將samaccountname綁定到特定組

[英]Query active directory Using Java for samaccountname's Tied to a Specific Group

您好,下面的LDAP查詢返回特定組中成員的“ givenName”列表。 但是,我將返回特定組中成員的“ sAMAccountName”列表。 我對LDAP不太熟悉,不確定如何做到這一點。 任何幫助表示贊賞。

    public LdapContext getLdapContext(){
        LdapContext ctx = null;
        String connection = null;
        try{
            Hashtable<String, String> env = new Hashtable<String, String>();
            env.put(Context.INITIAL_CONTEXT_FACTORY,
                    "com.sun.jndi.ldap.LdapCtxFactory");
            env.put(Context.SECURITY_AUTHENTICATION, "Simple");
            env.put(Context.SECURITY_PRINCIPAL, "userPrincipalName");
            env.put(Context.SECURITY_CREDENTIALS, "Password");
            env.put(Context.PROVIDER_URL, "domainController");
            ctx = new InitialLdapContext(env, null);
            connection = "Connection Successful.";
        }catch(NamingException nex){
            connection = "LDAP Connection: FAILED";
            nex.printStackTrace();
        }
        this.getUserBasicAttributes("(&(objectClass=group)(CN=Users_Group))", ctx);
        return ctx;
    }

    private void getUserBasicAttributes(String groupID, LdapContext ctx) {
        try {
            String userName = null;
            String member = null;

            SearchControls constraints = new SearchControls();
            constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
            String[] attrIDs = {"member"};
            constraints.setReturningAttributes(attrIDs);
            NamingEnumeration answer = ctx.search("DC=Domain,DC=com", groupID, constraints);
            if (answer.hasMore()) {
                Attributes attrs = ((SearchResult) answer.next()).getAttributes();
                member = attrs.get("member").toString();
            }else{
                throw new Exception("Invalid Group");
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return;
    } 

以上查詢的結果類似於以下內容:

member: CN=FistName 
LastName,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData, 
CN=FistName2 
LastName2,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData, 
CN=FistName3 
LastName3,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData, 
CN=FistName4 
LastName4,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData

您粘貼的代碼和粘貼的輸出不會檢索成員的givenName屬性。 它僅檢索具有cn=Users_Group的組成員的dn

用戶的dn由用戶的cn屬性構成,因此為什么您看到CN=FistName LastName,OU=ouData,OU=ouData,OU=ouData,DC=dcData,DC=dcData,DC=dcData

要檢索這些用戶的samAccountName ,您現在必須遍歷這些dn並檢索與dn對應的每個條目的samAccountName屬性。

由於您引用的是“ samAccountName”,因此假設您使用的是Microsoft Active Directory,則可以將過濾器( LDAP_MATCHING_RULE_IN_CHAIN )用作:

(&(objectClass=user)(memberof:1.2.840.113556.1.4.1941:=CN=GroupOne,OU=Security Groups,OU=Groups,DC=YOURDOMAIN,DC=NET) 

並返回“ samAccountName”作為屬性。 -Jim

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM