繁体   English   中英

LDAP不返回所有属性

[英]LDAP not returning all attributes

我正在使用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"
});

然后,奇迹般地它确实回来。

为什么? SearchControl是javadoc说谎吗?

我该如何告诉它,我真的 希望所有的属性回来了?

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

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

我怎么告诉它我真的想要所有的属性?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM