【发布时间】:2021-03-16 17:31:23
【问题描述】:
我的 spring 应用程序有一个 ldap 身份验证。为了给我的customUserDetails添加特殊属性,我做了一个CustomLdapUserDetailsMapper。
我需要搜索在我的 LDAP 中定义的用户角色。 Ldap 的配置如下:一个特定的用户有一个成员列表,它可以有一个 memberof 列表等。所以我需要浏览所有这棵树才能找到一个特定的组。
问题是我无法访问所有 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;
}
}
这里不起作用,子上下文不包含给定 DN 名称的属性。
你知道我是否可以在 Mapper 中浏览我的 memberof 列表的子属性树吗?
【问题讨论】:
标签: spring security spring-security ldap