LdapContext.search() 不返回自定义 Active Directory 属性

Posted

技术标签:

【中文标题】LdapContext.search() 不返回自定义 Active Directory 属性【英文标题】:LdapContext.search() not returning custom Active Directory attributes 【发布时间】:2015-06-30 18:38:23 【问题描述】:

我想查询 Active Directory 用户属性,包括自定义属性。我收到的内置属性很好,但Attributes 对象中的自定义属性为空。我知道它在那里并且已经设置好了,因为我得到了在 PowerShell 程序中工作的等价物。

这是我正在做的事情:

SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
String[] attrIDs =  "distinguishedName", "mail", "mycustomattribute";
constraints.setReturningAttributes(attrIDs);

NamingEnumeration<SearchResult> answer = ldapContext.search("DC=mydomain,DC=lan", "sAMAccountName="
        + user, constraints);
if (answer.hasMore())

    Attributes attrs = answer.next().getAttributes();
    System.out.println("distinguishedName "+ attrs.get("distinguishedName"));
    System.out.println("mail "+ attrs.get("mail"));
    System.out.println("custom "+ attrs.get("mycustomattribute"));

这会正确输出专有名称和邮件,但它会为自定义属性输出 null。

我首先使用 PowerShell 进行了测试,以确保属性设置正确。我做了一个$user = Get-ADUser ...,然后输出$user.mycustomattribute,得到了预期值。我的 Java 应用程序需要这个值。

到目前为止,这是我的思考过程......

是否需要以不同方式访问自定义属性?我不确定,但 Google 查询并没有显示任何建议。

这可能与查询的域控制器没有该数据有关吗?在设置 LdapContext 对象时,我确实有 hashtable.put(Context.REFERRAL, "follow"); 用于环境属性,所以我猜这排除了这一点。

我刚刚意识到,如果我使用 ADSI Edit(浏览数据的 MS 工具),如果我以非域管理员用户身份运行自定义属性,则自定义属性显示为 &lt;not set&gt;,但如果我以域管理员,它在 ADSI Edit 中正确显示属性。我以为我已经弄明白了,所以我以域管理员的身份运行 Java 应用程序,但它仍然无法工作(获取其他属性,但没有自定义属性)。

【问题讨论】:

【参考方案1】:

我终于想通了,我觉得自己有点像个笨蛋。

当我运行 ADSI Edit 时,除非我以域管理员身份运行它,否则它不会给我正确的值,我认为这就是答案,但我试图通过运行 来修复它我的程序 作为管理员。我仍在为上下文环境中的域控制器提供非管理员凭据。

hashtable.put(Context.SECURITY_PRINCIPAL, "non-admin account");

应该是什么时候

hashtable.put(Context.SECURITY_PRINCIPAL, "admin account");

所以根本问题是我没有权限读取我正在搜索的自定义属性。我以为每个人都可以读取这些属性(事实上,设置它的网络/AD 管理员也告诉过我很多,否则我会早点检查),但实际上并非如此。

道德:不要总是相信提供给您的环境条件。我花了将近两天的时间,因为我没有质疑网络管理员提供的配置。 (不过没有难过的感觉,我也会犯错误。)

【讨论】:

以上是关于LdapContext.search() 不返回自定义 Active Directory 属性的主要内容,如果未能解决你的问题,请参考以下文章

从自定义查询返回模型而不访问数据库

UIView 类别 - 自定义方法不返回 UIView

Django 自定义模板标签不返回任何值

如果条件不满足,则“短路”YARP RequestTransform 并返回自定义响应

PayPal IPN 不返回自定义字段

IOS自定义导航返回按钮不起作用