无法访问LdapUserDetailsMapper中的所有LDAP属性



我的spring应用程序有一个ldap身份验证。为了为我的customUserDetails添加特殊属性,我制作了一个CustomLdapUserDetailsMapper

我需要在LDAP中搜索用户角色定义。Ldap的配置如下:一个特定的用户有一个memberof-list,它可以有一个memberoflists to,等等。所以我需要浏览所有这棵树才能找到一个特定组。

问题是我无法访问所有LDAP。我只有我的用户的属性DN,但我找不到memberof列表的属性。

这是我的CustomLdapUserDetailsMapper:

@Component
public class CustomLdapUserDetailsMapper extends LdapUserDetailsMapper {
@Override
public CustomUserDetails mapUserFromContext(DirContextOperations ctx, String username,
Collection<? extends GrantedAuthority> authorities) {
UserDetails details = super.mapUserFromContext(ctx, username, authorities);
CustomUserDetails user = new CustomUserDetails((LdapUserDetails) details);
Attributes attributes = ctx.getAttributes();
try {
Attribute memberOf = attributes.get("memberOf");
if (memberOf != null) {
List<?> userGroups = Collections.list(memberOf.getAll());
userGroups.forEach(group -> {
String memberOfDn = group.toString();
try {
DirContextAdapter subContext = new DirContextAdapter(memberOfDn);
Attributes subAttributes = subContext.getAttributes();
Attribute subMemberOf = subAttributes.get("memberOf");
List<?> subGroupsMemberOf = Collections.list(subMemberOf.getAll());
} catch (Exception e) {
e.printStackTrace();
}
});
}
} catch (NamingException e) {
e.printStackTrace();
}
return user;
}
}

它在这里不起作用,subContext不包含给定DN名称的属性。

你知道我是否可以在Mapper中浏览我的memberof列表的子属性树吗?

您需要从ldap服务器管理员那里准确地学习组dn。您的用户不包含名为memberof的列表。你需要这样搜索;

AndFilter filter = new AndFilter();
filter.and(new EqualsFilter("uid", userName));
filter.and(new EqualsFilter("isMemberOf",
CN=ADMIN,ou=users));
List<?> userList = ldapTemplate.search(
"ou=exampleUsers",
filter.encode(),
new CustomLdapUserDetailsMapper()
);

如果从这次搜索中返回任何内容,那么您确定您的用户是ADMIN 的成员

相关内容

  • 没有找到相关文章