首页 > 解决方案 > LDAP DirContext 搜索 - Perl 到 Java,返回不同的对象模型

问题描述

我在 CPAN 引用这段代码来执行 LDAP 中的搜索。当我运行这个脚本时,我可以看到对象模型;此外,我搜索的每个用户的模型都是相同的。 网络::LDAP::示例

使用 Perl 脚本检索的对象模型:
objectClass: top
person
organizationsperson
user
cn: someuser
sn: user
title: ENGINEER.SOFTWARE ENGINEERING
itDescription: Business Intelligence - DIS56
whenCreated:
20130419212146.0Z whenChanged: 20190819042554.0Z

现在我正在编写 Java 代码来使用 JNDI 建立 LDAP 连接,在这里,我看不到它的描述和标题等属性;此外,我搜索的每个用户的模型都不同 - 属性缺失或过多。

使用 JNDI 检索的对象模型:
[objectCategory]=[CN=Person,CN=Schema,CN=Configuration,DC=tester,DC=com]
[whenCreated]=[20130419212146.0Z]

有人可以告诉我为什么会这样吗?这是我的连接和搜索代码-

Hashtable<String, String> env = new Hashtable<String, String>();
    env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
    env.put(Context.PROVIDER_URL, "ldap://ds.tester.com:3268");
    env.put(Context.SECURITY_AUTHENTICATION, "simple");
    env.put(Context.SECURITY_PRINCIPAL, uName);
    env.put(Context.SECURITY_CREDENTIALS, pwd);
    DirContext context = new InitialDirContext(env);

    SearchControls cons = new SearchControls();
    cons.setSearchScope(SearchControls.SUBTREE_SCOPE);

    NamingEnumeration <SearchResult> srch = context.search("ou=employees,dc=tester,dc=com","sAMAccountName=someuser",cons);   

这是相关的 Perl 脚本 -

$ldap = Net::LDAP->new("ds.tester.com") or die "$@";
    print "User : "; my $user = <STDIN>; chomp($user);
    my $passwd = <STDIN>; chomp($passwd);
    my $userToAuthenticate = "cn=$user,ou=employees,dc=tester,dc=com";
    $mesg = $ldap->bind("$userToAuthenticate",password => "$passwd",version => 3 );
    my ($ldap,$searchString,$attrs,$base) = @_ ;
    if (!$base ) { $base = "DC=tester,DC=com"; }
    if (!$attrs ) { $attrs = ['sAMAccountName' ]; }

    my $result = $ldap->search (base    => "$base",
                    scope   => "sub",
                    filter  => "$searchString",
                    attrs   =>  $attrs
                    );

    foreach $entry ($result->entries) { $entry->dump; }

标签: javaperlldapjndi

解决方案


推荐阅读