Spring ldapTemplate:如何使用配置的基本 DN 查找完全限定的 DN?
Spring ldapTemplate: how to lookup fully qualified DN with configured base DN?
当我查找 DN with Springs ldapTemplate 时,我必须省略配置的基本 DN。
例如,当基本 DN 配置为 dc=company,dc=com
时,工作查找将类似于
ldapTemplate.lookup("ou=whatever,ou=groups")
当我通过完全合格的 DN
ldapTemplate.lookup("ou=whatever,ou=groups,dc=company,dc=com")
查找失败并提示 DN ou=whatever,ou=groups,dc=company,dc=com,dc=company,dc=com
(注意末尾的双碱基)不存在。
因此,当我根据以前查找返回的 DN 进行查找时,我必须从 DN 的末尾删除基数。
这很烦人,我几乎可以肯定有更好的方法来做到这一点。
那么,我如何使用已配置的基本 DN 查找完全限定的 DN?
我知道有一个查询方法接受一个基本参数,但这似乎是为了更真实的查询,而不是简单的查找。
使用@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);
根据 JavaDoc,这就是 LdapUtils#removeFirst
的用途:
/**
* 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>.
**/
或者,您可以配置 ContextSource
不带底座。然后,您的所有查询都使用 fully-qualified 名称。或者,您可以使用多个 ContextSource
;一个配置了底座,另一个没有。
当我查找 DN with Springs ldapTemplate 时,我必须省略配置的基本 DN。
例如,当基本 DN 配置为 dc=company,dc=com
时,工作查找将类似于
ldapTemplate.lookup("ou=whatever,ou=groups")
当我通过完全合格的 DN
ldapTemplate.lookup("ou=whatever,ou=groups,dc=company,dc=com")
查找失败并提示 DN ou=whatever,ou=groups,dc=company,dc=com,dc=company,dc=com
(注意末尾的双碱基)不存在。
因此,当我根据以前查找返回的 DN 进行查找时,我必须从 DN 的末尾删除基数。
这很烦人,我几乎可以肯定有更好的方法来做到这一点。
那么,我如何使用已配置的基本 DN 查找完全限定的 DN?
我知道有一个查询方法接受一个基本参数,但这似乎是为了更真实的查询,而不是简单的查找。
使用@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);
根据 JavaDoc,这就是 LdapUtils#removeFirst
的用途:
/**
* 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>.
**/
或者,您可以配置 ContextSource
不带底座。然后,您的所有查询都使用 fully-qualified 名称。或者,您可以使用多个 ContextSource
;一个配置了底座,另一个没有。