LDAP 存储库搜索期间发生 NameNotFoundException
如果在 LDAP 存储库中进行搜索期间发生 javax.naming.NameNotFoundException,请遵循这些故障诊断步骤。
问题
由于在 LDAP 存储库(例如 Microsoft Active Directory)中执行了基于根的搜索,而此存储库不支持基于根的搜索,因此发生 javax.naming.NameNotFoundException。
要验证此问题的原因,请检查 wimconfig.xml 文件基本条目,如以下示例中所示:
<config:baseEntries name="dc=ibm,dc=com" nameInRepository=""/>此示例中的参数映射到 WebSphere Application Server 管理控制台的存储库引用设置页面中指定的值。
name 参数为此存储库的虚拟成员管理器基本条目,此条目在虚拟成员管理器域中必须唯一。 设置 LDAP 存储库时,name 参数映射到字段唯一标识域中此条目集的基本条目的专有名称中指定的值。
nameInRepository 参数为存储库中基本条目的 LDAP 专有名称。 它会指示 LDAP 目录服务器中搜索的启动点。 nameInRepository 参数映射到字段此存储库中基本条目的专有名称中指定的值。
设置 LDAP 存储库时,如果此存储库中基本条目的专有名称字段为空白,例如 nameInRepository="",那么子树将缺省为 LDAP 存储库的根目录,这将成为搜索的起始点。 这会引起基于根的搜索。 如果存储库不支持基于根的搜索,那么 JNDI 搜索会引发 NameNotFoundException,此异常又会导致虚拟成员管理器抛出异常。
解决方案
在虚拟成员管理器中配置 LDAP 存储库时设置 LDAP 服务器搜索根。
在 WebSphere Application Server 管理控制台的“存储库引用设置”页面上,如果 LDAP 存储库不支持基于根的搜索,那么不要将此存储库中的基本条目的专有名称留空。