Java 使用SpringLDAP获取内部属性

Java 使用SpringLDAP获取内部属性,java,ldap,spring-ldap,Java,Ldap,Spring Ldap,我使用SpringLDAP 1.3.0库访问内部LDAP服务器(使用Java),但我遇到了一件事:如何获取LDAP的任何结构的内部属性?例如,如何获取用户的memberOf属性 我曾经用SpringLDAP搜索过很多,但是没有找到任何关于这个的东西。 任何想法都将受到欢迎。谢谢。它也适用于odmManager。差不多 DistinguishedName dn = new DistinguishedName("The path your are searching in"); SearchCont

我使用SpringLDAP 1.3.0库访问内部LDAP服务器(使用Java),但我遇到了一件事:如何获取LDAP的任何结构的内部属性?例如,如何获取用户的memberOf属性

我曾经用SpringLDAP搜索过很多,但是没有找到任何关于这个的东西。
任何想法都将受到欢迎。谢谢。

它也适用于odmManager。差不多

DistinguishedName dn = new DistinguishedName("The path your are searching in");
SearchControls searchControls = new SearchControls();
searchControls.setReturningObjFlag(true);
searchControls.setReturningAttributes("your attributes, as an array of strings");
return odmManager.findAll(User.class, dn, searchControls);

我用它来获取“createTimestamp”之类的字段…

正如您在评论中所说的那样,UserAttributeMapper是您的朋友

如果用户有多个“memberof”:

    static List<List<String>> getPersonGroupsByAccountName(String accountName){

    EqualsFilter filter = new EqualsFilter("sAMAccountName", accountName);
    return ldap.search(DistinguishedName.EMPTY_PATH,filter.encode(),new AttributesMapper(){
        public Object mapFromAttributes(
                javax.naming.directory.Attributes attrs)
        throws javax.naming.NamingException {
            List<String> memberof = new ArrayList();
            for (Enumeration vals = attrs.get("memberOf").getAll(); vals.hasMoreElements();) {
                memberof.add((String)vals.nextElement());
            }
            return memberof;
        }
    });
静态列表getPersonGroupsByAccountName(字符串accountName){
EqualsFilter过滤器=新EqualsFilter(“sAMAccountName”,accountName);
返回ldap.search(differentiedName.EMPTY_PATH,filter.encode(),new AttributesMapper()){
公共对象映射属性(
javax.naming.directory.Attributes(属性属性属性)
抛出javax.naming.NamingException{
List memberof=new ArrayList();
对于(枚举vals=attrs.get(“memberOf”).getAll();vals.hasMoreElements();){
memberof.add((字符串)vals.nextElement());
}
返回成员;
}
});

我相信有更好的方法可以做到这一点,但它是有效的。

我用它来获取“createTimestamp”或“pwdChangedTime”等字段, 和UserContextMapper,您可以参考以下资源:


我找到了一种非常简单的方法。例如:getLdapTemplate().search(“dc=MY_COMPANY,dc=com,dc=br)”,“(&(objectClass=person)(uid=USER_-uid))”,SearchControls.SUBTREE_范围,新字符串[]{“memberOf”},新用户属性映射());观察:在这段代码中,UserAttributeMapper只是我自己实现的org.springframework.ldap.core.AttributesMapper.Thank的可能副本!在所有帖子的所有搜索结果中,这是唯一对我有效的一个。+1.我很高兴这对你有帮助!
ldapTemplate.lookup(dn, new String[] {"*", "+"}, new UserContextMapper());