Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spring ldapTemplate: how to lookup fully qualified DN with configured base DN?

When I do a lookup for a DN with Springs ldapTemplate, I have to omit the configured base DN.

For example when the base DN is configured as dc=company,dc=com, a working lookup would be like

ldapTemplate.lookup("ou=whatever,ou=groups")

When I pass the fully qualified DN

ldapTemplate.lookup("ou=whatever,ou=groups,dc=company,dc=com")

the lookup fails and complains that the DN ou=whatever,ou=groups,dc=company,dc=com,dc=company,dc=com (note the doubled base at the end) does not exist.

As a consequence, when I do lookups based on returned DNs from previous lookups, I have to remove the base from the end of the DN.

This is quite annoying and I am almost sure that there is a better way to do this.

So, how can I do a lookup for a fully qualified DN with a configured base DN?

I know there is a query method that takes a base argument, but this seems to be made for more real queries, not simple lookups.

Example use of the accepted answer of @jzheaux

LdapName fqdn = ... //fully qualified DN with base DN that is returned from lookup
LdapName baseDn = ((LdapContextSource) ldapTemplate.getContextSource()).getBaseLdapName();
LdapName lookupDn = LdapUtils.removeFirst(fqdn, baseDn);
like image 740
burki Avatar asked Oct 21 '25 11:10

burki


1 Answers

According to the JavaDoc, this is what LdapUtils#removeFirst is for:

/**
 * Remove the supplied path from the beginning the specified
 * <code>Name</code> if the name instance starts with
 * <code>path</code>. Useful for stripping base path suffix from a
 * <code>Name</code>.
**/

Alternatively, you can configure your ContextSource with no base. Then, all your queries use a fully-qualified name. Or, you can use more than one ContextSource; one that has a base configured and another that does not.

like image 184
jzheaux Avatar answered Oct 25 '25 21:10

jzheaux