【问题标题】:LDAP not returning all attributesLDAP 未返回所有属性
【发布时间】:2015-05-22 20:21:38
【问题描述】:

我正在使用 Ldap 从 AD LDS 检索帐户:

Hashtable props = new Hashtable();
props.put(Context.SECURITY_PRINCIPAL, "cn=adminuser,o=myorg,c=uk");
props.put(Context.SECURITY_CREDENTIALS, "password");
props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
props.put(Context.PROVIDER_URL, "ldaps://myldapserver:636");
InitialLdapContext context = new InitialLdapContext(props, null);

SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
controls.setReturningAttributes(null);
    // according to javadoc, null means "return all attributes"

NamingEnumeration<SearchResult> results =
    context.search(userBase, "cn=SOMEUSER", controls);

帐户恢复正常。但并非 SOMEUSER 的所有属性都会返回。

具体来说,msDS-UserPasswordExpired 属性永远不会返回。


但是...如果我在SearchControls 中列出该属性:

controls.setReturningAttributes(new String[] {
    "msDS-UserPasswordExpired", "cn", "mail"
});

然后它神奇地确实回来了。

为什么? SearchControljavadoc 是不是在撒谎?

我如何告诉它我真的 真的想要所有属性?

解决方法是列出我想要返回的每个属性。但这很可怕,并且会使得添加未来的字段非常容易出错。

【问题讨论】:

  • 您是否尝试过从代码中删除 setRetuningAttributes(null) 行。
  • @Shriram 这不会有任何区别。这是默认设置。

标签: java active-directory ldap adam adlds


【解决方案1】:

密码控制属性是操作属性,除非您特别要求,否则不会返回。

我如何告诉它我真的很想恢复所有属性?

您指定 new String[]{"*", "+"} 作为要返回的属性 ID:"*" 表示所有非操作属性,"+" 表示所有操作属性。但这通常不是一个好主意。有许多与您无关的运营属性。只问你真正需要什么。

【讨论】:

  • 即使我们使用 * 也不会返回那个值。其他人都来了。如何同时使用 * 和该值?
  • @Anand_5050 那是因为您没有按照我的回答中所说的去做。
  • 这是正确的吗?应该是:“*”表示所有非操作属性,“+”表示所有操作属性
猜你喜欢
  • 1970-01-01
  • 2021-09-21
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 1970-01-01
  • 1970-01-01
  • 2018-12-22
相关资源
最近更新 更多