java - 如何在找到结果时停止 LDAP 搜索

标签 java spring-ldap ldap-query

我正在尝试从distinguishedName 参数获取登录用户的组名。我可以找到组名称,但搜索是 countine,即使我在 ldap 搜索和 and gets 中找到该人

PartialResultException:未处理的继续引用;

这是我的代码

当我获得成功结果时,我想停止 ldapTemplate.search 进程,你们有什么想法吗?

public List<String> getUserGroup(String username) throws Exception {
        try {
            LdapQuery query;
            LdapTemplate ldapTemplate = ldapConf.ldapTemplate();
            if (ldapConf.getSearchBase().isEmpty()) {
                System.out.println("searchbase empty");
                query = query().where(env.getProperty("retouch.ldap.searchKeyword")).isPresent();
            } else
                query = query().base(ldapConf.getSearchBase()).where(env.getProperty("retouch.ldap.searchKeyword")).isPresent();
            List<String> result = ldapTemplate.search(query, new AttributesMapper<String>() {
                public String mapFromAttributes(Attributes attrs) throws NamingException, javax.naming.NamingException {

                    for (Enumeration vals = attrs.get("distinguishedName").getAll(); vals.hasMoreElements();) {
                        String userName = (String) vals.nextElement();
                        if (userName.contains(username)) {
                            return (String) attrs.get("distinguishedName").get();
                        }
                    }

                    return null;
                }
            });
            logger.debug("ldap groups" + result);
            while (result.remove(null)) {
            }
            return result;
        } catch (Exception e) {
            e.printStackTrace();
            logger.error(e, e);
            throw e;
        }
    } 

最佳答案

我完全误解了 ldap 搜索机制。我的 ldap 查询也是错误的

query = query().where(env.getProperty("ldap.searchKeyword")).isPresent();

而不是 isPresent()我应该使用 is(username)这样我就可以直接获取我想要的用户。我还试图在我的代码中获取用户 DN。而不是new AttributesMapper<String>() , new ContextMapper<String>()提供 DN

关于java - 如何在找到结果时停止 LDAP 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60741566/

相关文章:

java - 从云应用程序访问数据库

ssl - Spring Ldap 解除与 tls 连接的绑定(bind)。验证失败

.net - Active Directory 是否可以回滚?

syntax - LDAP 语法/语义 : Filter vs. 基本 DN?

java - 函数是否只存在于非面向对象的语言中?

java - 当不在 pom 中时缺少 Artifact javax.activation :activation:jar:1. 0.2

grails - 在 Grails 中,如何根据 LDAP 身份验证创建和/或更新用户,然后登录?

kubernetes - 使用 DEX (LDAP) 进行身份验证时组为空

java - 用于 Java 的 DVD 刻录 API

java - 盐渍 SHA 类型中的 Spring LDAP 身份验证错误凭据密码