当前位置: 首页 > 面试题库 >

LDAP如何在Java中针对此LDAP搜索/认证

邵阳
2023-03-14
问题内容

我正在玩LDAP和Java搜索。这是我的一个简单组织的LDIF导出

version: 1

dn: dc=example,dc=com
objectClass: organization
objectClass: dcObject
objectClass: top
dc: example
o: MyOrganization
description: Test Description

dn: ou=people, dc=example,dc=com
objectClass: organizationalUnit
objectClass: top
ou: people
description: All users in demo company

dn: cn=Johnny Doe,ou=people,dc=example,dc=com
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn: Johnny Doe
sn: Johnny
homephone: 123-456-7890
mail: johnny@johnny.com
ou: Development
uid: jjohnny
userpassword:: johnny

dn: cn=Samuel Johnson,ou=people,dc=example,dc=com
objectClass: organizationalPerson
objectClass: person
objectClass: inetOrgPerson
objectClass: top
cn: Samuel Johnson
sn: Samuel
homephone: 123-456-7890
mail: sam@ssam.com
ou: Accounts
uid: ssam
userpassword:: sammy

如何运行Java代码段以从LDAP服务器获取所有用户?我的Apache DS目录服务器上没有身份验证设置。

Hashtable env = new Hashtable(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:10389/dc=example,dc=com");
env.put(Context.SECURITY_AUTHENTICATION, "none");

try {
    // Create initial context
    DirContext ctx = new InitialDirContext(env);
    Object obj = new Object();
    // want to print all users from the LDAP server
    System.out.println(obj.toString());
    ctx.close();
}

问题答案:
try {
    LdapContext ctx = new InitialLdapContext(env, null);
    ctx.setRequestControls(null);
    NamingEnumeration<?> namingEnum = ctx.search("ou=people,dc=example,dc=com", "(objectclass=user)", getSimpleSearchControls());
    while (namingEnum.hasMore ()) {
        SearchResult result = (SearchResult) namingEnum.next ();    
        Attributes attrs = result.getAttributes ();
        System.out.println(attrs.get("cn"));

    } 
    namingEnum.close();
} catch (Exception e) {
    e.printStackTrace();
}

private SearchControls getSimpleSearchControls() {
    SearchControls searchControls = new SearchControls();
    searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
    searchControls.setTimeLimit(30000);
    //String[] attrIDs = {"objectGUID"};
    //searchControls.setReturningAttributes(attrIDs);
    return searchControls;
}


 类似资料:
  • 我安装并配置了OpenLDAP服务器,配置如下: 我测试了这个简单的Java LDAP客户机,以便通过发送用户名和密码对用户进行身份验证:

  • 我需要在身份验证后从LDAP中检索各种值,如描述、办公室等。 我已经能够完成身份验证,但无法检索其他值。 我应该使用什么名称来检索完整的数据?? 请帮助。 我的代码如下:

  • 问题内容: 我正在使用JNDI连接到LDAP活动目录,并且我想搜索名称包含搜索字符串的用户,因此我的搜索方法如下: 这是我与LDAP建立连接的方式: LDAP凭证如下: 为什么搜索需要那么多时间来检索数据?由于广告中只有285个联系人,我可以做些什么来加快搜索速度吗? 问题答案: 解决方案是更改为

  • 我在本地机器上有一个通过SSL的LDAP服务器,并从同一台机器和我的应用程序连接它。下面是连接LDAP服务器的代码: 在尝试使用添加搜索过滤器之前,一切都很好。通常,如果没有它,搜索筛选器将包含,用于以下LDAP服务器: 我试图允许用户使用添加额外的搜索筛选器,我尝试使用以下方法搜索值: null 我不确定是否正确地应用了附加的搜索筛选器,但是从我的方法返回null。如果我做错了什么,请指导我,因

  • 搜索的范围设置为子树。我以为子树作用域会导致LDAP在整个树中递归搜索,但事实似乎并非如此。但是,如果我像下面这样将完整的路径添加到搜索中,就会找到该条目。 有人能告诉我哪里出了问题吗?谢了。

  • 我使用的是运行在一台服务器上的open LDAP,它运行在10.0.26.x IP上,而我的客户端运行在IP 10.0.25.x上,防火墙位于两者之间,但端口389是打开的,处于侦听状态。所以我面临的问题是,客户机关闭了客户机服务器,之后我必须每6个小时重新启动客户机,然后它可以正常工作一段时间,然后再次给出同样的问题。 我得到的例外是: