Проблема при поиске метода Spring ldapTemplate
Я использую ldapTemplate из Spring. В моем ldaputility.java я делаю так:
public Object findUser(String username) {
System.out.println("inside find USer with username : "+username);
Object object=ldapTemplate.lookup("uid=xyz,cn=users,o=companyName",
new AttributesMapper<Object>()//GETTING ERROR AT THIS LINE
{
@Override
public User mapFromAttributes(Attributes attrs) throws NamingException {
User user = new User();
user.setFullName((String)attrs.get("cn").get());
user.setLastName((String)attrs.get("sn").get());
user.setPassword((String)attrs.get("password").get());
return user;
}
});
return object;
}
в моем ldif я делаю что-то вроде этого:
dn: o=companyName
objectclass: domain
objectclass: top
dn: cn=users,o=companyName
objectclass: container
objectclass: top
cn: users
dn: cn=groups,o=companyName
objectclass: top
objectclass: container
cn: groups
dn: uid=xyz,cn=users,o=companyName
objectclass: top
objectclass: person
objectclass: organizationalPerson
objectclass: inetOrgPerson
uid: xyz
userpassword: xyz123
sn: xyz
givenName: xyz
cn: xyz abc
Когда контроль приходит на ldapTemplate.lookup(), я получаю следующую ошибку
org.springframework.ldap.InvalidNameException: uid=xyz,cn=users,o=companyName: [LDAP: error code 34 - Invalid DN Syntax];
nested exception is javax.naming.InvalidNameException: uid=xyz,cn=users,o=companyName: [LDAP: error code 34 - Invalid DN Syntax];
remaining name 'uid=xyz,cn=users,o=companyName
Искал много, но не смог решить эту проблему. Кто-нибудь, пожалуйста, помогите мне в этом.
1 ответ
Исключение указывает на неверный синтаксис в отличительном имени. Синтаксис DN - особенно в отношении кодирования специальных символов - является довольно сложным, поэтому следует избегать создания отличительных имен с использованием конкатенации строк (если это то, что вы делаете).
Попробуйте использовать LdapNameBuilder для создания отличительных имен.