Проблема с поисковым запросом LdapTemplate - PullRequest
0 голосов
/ 08 января 2020

В моем проекте я использую интеграцию Spring Ldap. Мое требование заключается в поиске группы, к которой принадлежит зарегистрированный пользователь.

Я использую класс LdapTemplate для этого:

LdapContextSource contextSource = new LdapContextSource();
contextSource.setUrl(ldapUrl);
String userDn = "CN=Demo User,CN=MyUsers,DC=MyDOMAIN,DC=MyCompany";
contextSource.setUserDn(userDn);
contextSource.setPassword(mypassword);
contextSource.afterPropertiesSet();
ldapTemplate = new LdapTemplate(contextSource);

 ArrayList<?> groupList = ldapTemplate
    .search(query().searchScope(SearchScope.SUBTREE)
            .where("sAMAccountName").is("Demo.User"),
            (AttributesMapper<ArrayList<?>>) attrs -> Collections.list(attrs.get("memberOf").getAll())).get(0);

Над кодом работает нормально, но моя проблема в том, что пользователь получает вошел в систему с именем пользователя как Demo.User , которое фактически является SAMACCOUNTNAME в моем ldap. Но имя CN в моем ldap, соответствующее пользователю, является "Demo User", а не "Demo.User" .

Поскольку я использую класс Spring LdapTemplate, он запрашивает у меня userDN , где, если я даю CN = "Demo.User", он не принимает.

Это дает следующее исключение

org.springframework.ldap.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C09042A, comment: AcceptSecurityContext error, data 52e, v3839]; nested exception is javax.naming.AuthenticationException: [LDAP: error code 49 - 80090308: LdapErr: DSID-0C09042A, comment: AcceptSecurityContext error, data 52e, v3839]

Как вы видите на уровне кода, я получаю userName как «Demo.User», затем в моем CN = «Demo User». Я не хочу манипулировать «.» с пробелом в моем java коде.

Как я могу преодолеть это?

...