如何将所有memberOf属性分配给LDAP中的特定用户

时间:2015-07-23 13:30:26

标签: java spring spring-security ldap

我创建了一个使用LDAP进行身份验证的应用程序。我需要找出用户分配到的所有组名。有没有办法找出答案。我已经编写了代码但不知何故它只返回一个随机的组名。

以下是我的代码,以获取用户的所有成员。

dbadmin=> CREATE TABLE tbl (a int PRIMARY KEY);
CREATE TABLE
dbadmin=> COPY tbl FROM STDIN NO COMMIT;
Enter data to be copied followed by a newline.
End with a backslash and a period on a line by itself.
>> 1
>> 2
>> 2
>> 3
>> \.
dbadmin=> SELECT * FROM tbl;
 a
---
 1
 2
 2
 3
(4 rows)

dbadmin=> SELECT ANALYZE_CONSTRAINTS('tbl');
 Schema Name | Table Name | Column Names | Constraint Name | Constraint Type | Column Values
-------------+------------+--------------+-----------------+-----------------+---------------
 public      | tbl        | a            | C_PRIMARY       | PRIMARY         | ('2')
(1 row)

dbadmin=> DELETE FROM tbl WHERE a = 2;
 OUTPUT
--------
      2
(1 row)

dbadmin=> COMMIT;
COMMIT
dbadmin=> SELECT * FROM tbl;
 a
---
 1
 3
(2 rows)

该类用于为用户设置属性和返回属性。

先谢谢。

1 个答案:

答案 0 :(得分:5)

这比我想象的容易得多。请在下面找到代码。在这里你只需要枚举for循环中的所有memberOf并在List中赋值int,然后返回List以及所有其他属性。

以下是代码。

private class UserAttributesMapper implements AttributesMapper {
    @Override
    public Object mapFromAttributes(Attributes attributes) throws NamingException {
        LdapUser user = new LdapUser();
        user.setCn((String)attributes.get("cn").get());
        List<String> memberOf = new ArrayList<String>();

        for(Enumeration vals = attributes.get("memberOf").getAll(); vals.hasMoreElements();){
            memberOf.add((String)vals.nextElement());
        }
        user.setMemberOf(memberOf);
        user.setsAMAccountName((String)attributes.get("sAMAccountName").get());
        user.setMail((String)attributes.get("mail").get());
        return user;
    }
}