使用java列出ldap中的所有sAMAccountName

使用java列出ldap中的所有sAMAccountName,java,active-directory,ldap,Java,Active Directory,Ldap,我想从ldap获取所有sAMAccountName的列表,下面是通过使用sAMAccountName为我提供用户ldap属性的方法 public static void searchUserFromLdap(String samAccountName) throws Exception{ SearchResult searchResult = ldapConnection.search("CN=XX,DC=XX,DC=XX", SearchScope.SUB, "(sAMAccount

我想从ldap获取所有sAMAccountName的列表,下面是通过使用sAMAccountName为我提供用户ldap属性的方法

public static void searchUserFromLdap(String samAccountName) throws Exception{

    SearchResult searchResult = ldapConnection.search("CN=XX,DC=XX,DC=XX", SearchScope.SUB, "(sAMAccountName=" + samAccountName +")"); 

    if(searchResult.getSearchEntries().size()<=0){
        System.out.println("No such user found in LDAP");
        return;
    }

    System.out.println("Start :- LDAP attributes for given user\n");
    for(SearchResultEntry searchResultEntry : searchResult.getSearchEntries()){

        System.out.println(searchResultEntry.toLDIFString());
    }

    System.out.println("\nEnd :- LDAP attributes for given user");

}
public static void searchUserFromLdap(字符串samAccountName)引发异常{
SearchResult SearchResult=ldapConnection.search(“CN=XX,DC=XX,DC=XX”,SearchScope.SUB,”(sAMAccountName=“+sAMAccountName+”));

如果(searchResult.getSearchEntries().size()我不确定什么是
ldapConnection
。它来自哪里

从方法的外观来看,第三个参数是LDAP搜索筛选器。您只需将此筛选器更改为以下内容:

(objectClass=user)
因此,方法调用将是:

SearchResult searchResult = ldapConnection.search(
        "CN=XX,DC=XX,DC=XX", 
        SearchScope.SUB, 
        "(objectClass=user)");
SearchResult searchResult = ldapConnection.search(
        "CN=XX,DC=XX,DC=XX", 
        SearchScope.SUB, 
        "(objectClass=user)",
        "sAMAccountName");
SearchResult
将包含在
CN=XX,DC=XX,DC=XX
下找到的所有用户

如果它来自unbounded,那么您可以添加第四个参数来定义您只希望为每个结果返回
sAMAccountName
ldap属性

SearchResult searchResult = ldapConnection.search(
        "CN=XX,DC=XX,DC=XX", 
        SearchScope.SUB, 
        "(objectClass=user)");
SearchResult searchResult = ldapConnection.search(
        "CN=XX,DC=XX,DC=XX", 
        SearchScope.SUB, 
        "(objectClass=user)",
        "sAMAccountName");
有关LDAP搜索筛选器的更多详细信息,请参阅以下资源:

我不确定上面的文章,因为我还没有尝试过,但在阅读了oracle文档后,我修改了搜索查询,结果成功了,下面是我所做的

public static void getListOfAllSamAccountName() throws Exception {
    List<String> samAccountNameList = null;
    SearchResult searchResult = ldapConnection.search(
            "CN=XX,DC=XX,DC=xx", SearchScope.SUB,
            "(sAMAccountName=*)");

    if (searchResult.getSearchEntries().size() <= 0) {
        System.out.println("No such user found in LDAP");
        return;
    }
    samAccountNameList = new ArrayList<String>();
    System.out.println("Start :- LDAP attributes for given user\n");
    for (SearchResultEntry searchResultEntry : searchResult
            .getSearchEntries()) {
        Attribute attribute = searchResultEntry
                .getAttribute("sAMAccountName");
        String samAccountName = attribute.getValue();

        samAccountNameList.add(samAccountName);

    }

    if (samAccountNameList != null) {
        System.out
                .println("*******************************List of Same account Name******************************");
        for (String samAccountName : samAccountNameList) {

            System.out.println(samAccountName);
        }
    }

    System.out.println("\nEnd :- LDAP attributes for given user");

}
public static void getListOfAllSamAccountName()引发异常{
List-samAccountNameList=null;
SearchResult SearchResult=ldapConnection.search(
“CN=XX,DC=XX,DC=XX”,SearchScope.SUB,
“(sAMAccountName=*)”;

如果(searchResult.getSearchEntries().size()你对我的回答是对的,我忘了过滤对象类。回答好。你最好使用
objectCategory
。我有相关的问题,但我是初学者……如果有子域(childa、abc.com childb.abc.com、childc.abc.com)并且包含相同的samaccountname(123456789)广告将如何进行身份验证?是否将逐个检查子域,以便对用户进行身份验证?我的应用程序仅使用samaccountname作为登录id。每个子域中此samaccount的密码有何不同??