BACKGROUND
When using Spring’s LdapTemplate, there are two ways to transform the queried results: AttributesMapper and ContextMapper.
List<mybean> list = ldapTemplate.search(
'',
'(cn=some-group-name)',
// AttributesMapper or ContextMapper
)
Here’s the comparison between these mapper classes.
AttributesMapper
If you are migrating your existing LDAP queries to Spring’s LdapTemplate, AttributesMapper seems ideal because you can copy most of the code over because it provides javax.naming.directory.Attributes.
List<mybean> list = ldapTemplate.search(
'',
'(cn=some-group-name)',
new AttributesMapper<mybean>() {
@Override
MyBean mapFromAttributes(final Attributes attributes) throws NamingException {
return new MyBean(
cn: attributes.get('cn')?.get(),
members: attributes.get('member')?.getAll()?.toSet() as Set<string> ?: []
)
}
}
)
However, you have to handle possible null values if the attribute keys do not exist.
ContextMapper
With ContextMapper, it handles null values for us. Spring also provides an abstract class called AbstractContextMapper to further simplify the code.
List<mybean> list = ldapTemplate.search(
'',
'(cn=some-group-name)',
new AbstractContextMapper<mybean>() {
@Override
protected MyBean doMapFromContext(final DirContextOperations ctx) {
return new MyBean(
cn: ctx.getStringAttribute('cn'),
members: ctx.getStringAttributes('member')
)
}
}
)
Leave a Reply