spring - 无法访问 LdapUserDetailsMapper 中的所有 LDAP 属性
问题描述
我的 spring 应用程序有一个 ldap 身份验证。为了为我的 customUserDetails 添加特殊属性,我制作了一个CustomLdapUserDetailsMapper
.
我需要搜索在我的 LDAP 中定义的用户角色。Ldap 的配置如下:一个特定的用户有一个 memberof 列表,它可以有一个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 名称的属性。
你知道我是否可以memberof
在 Mapper 中浏览我的列表的子属性树吗?
解决方案
您需要完全从 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 的成员
推荐阅读
- javascript - 如何更改函数返回的对象属性以使函数可重用
- ruby-on-rails - 如何在 ruby on rails 中合并 json arry
- sql - SQL 如何从 2 列的组合中查找重复项,不区分大小写和重音
- mongodb - 删除同一字段上匹配的两个正则表达式
- powershell - Azure Web App - 设置 TLS 的最低版本
- angular -
- javascript - 尽管使用缓冲区调用文件类型 npm 模块,但它返回 null,我做错了什么?
- android - Why Job services are still scheduled after app uninstall
- java - 使用 getResourceAsStream 使用他的完整路径读取 Android 文件
- java - 如何修复 RAM 格式大小?