Spring LDAP 1.3.0 澄清

Posted

技术标签:

【中文标题】Spring LDAP 1.3.0 澄清【英文标题】:Spring LDAP 1.3.0 clarify 【发布时间】:2011-03-22 15:59:53 【问题描述】:

我有这个错误,这是什么意思?

org.springframework.ldap.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-031001A8, problem 2001 (NO_OBJECT), data 0, best match of:
    ''
]; nested exception is javax.naming.NameNotFoundException: [LDAP: error code 32 - 0000208D: NameErr: DSID-031001A8, problem 2001 (NO_OBJECT), data 0, best match of:
    ''
]; remaining name '/'
    org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:172)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:306)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:237)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:624)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:535)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:462)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:483)
    org.springframework.ldap.core.LdapTemplate.search(LdapTemplate.java:503)
    org.springframework.ldap.core.LdapTemplate.authenticate(LdapTemplate.java:1424)
    org.springframework.ldap.core.LdapTemplate.authenticate(LdapTemplate.java:1386)
    com.spsetia.iss.services.ISSServiceImpl.login(ISSServiceImpl.java:92)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    $Proxy55.login(Unknown Source)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    java.lang.reflect.Method.invoke(Method.java:597)
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    $Proxy56.login(Unknown Source)
    com.spsetia.iss.services.UserDetailsServiceImpl.loadUserByUsername(UserDetailsServiceImpl.java:70)
    com.spsetia.iss.services.UserDetailsAuthenticationProvider.retrieveUser(UserDetailsAuthenticationProvider.java:26)
    org.springframework.security.providers.dao.AbstractUserDetailsAuthenticationProvider.authenticate(AbstractUserDetailsAuthenticationProvider.java:121)
    org.springframework.security.providers.ProviderManager.doAuthentication(ProviderManager.java:188)
    org.springframework.security.AbstractAuthenticationManager.authenticate(AbstractAuthenticationManager.java:46)
    org.springframework.security.ui.webapp.AuthenticationProcessingFilter.attemptAuthentication(AuthenticationProcessingFilter.java:82)
    org.springframework.security.ui.AbstractProcessingFilter.doFilterHttp(AbstractProcessingFilter.java:258)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    org.springframework.security.context.HttpSessionContextIntegrationFilter.doFilterHttp(HttpSessionContextIntegrationFilter.java:235)
    org.springframework.security.ui.SpringSecurityFilter.doFilter(SpringSecurityFilter.java:53)
    org.springframework.security.util.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:390)
    org.springframework.security.util.FilterChainProxy.doFilter(FilterChainProxy.java:175)
    org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:236)
    org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167)

我正在尝试这样做

 filter.and(new EqualsFilter("objectclass", "user")).and(new EqualsFilter("mail", username));
  return ldapTemplate.authenticate(DistinguishedName.EMPTY_PATH, filter.toString(), password);

【问题讨论】:

【参考方案1】:

我有两个版本的代码,一个使用 Spring LDAP 1.2.1,另一个使用 1.3.0。 1.2.1 版本有效,1.3.0 版本出现上述错误。

两个版本之间存在细微差别。 1.3.0 版本禁用连接池并使用 SingleContextSource。 (也避免了 ldap 连接池,这会弄乱 Active Directory 中分页结果的检索)

所以我认为 1.3.0 引入了一个错误。

【讨论】:

【参考方案2】:

LDAP 32 类似于 eDirectory -601 和 AD(啊,我忘记了代码)。

基本上找不到对象。我想知道您提供的绑定的 DN 是否不正确?由于您正在进行搜索,并且在搜索中未找到的对象实际上应该只返回一个空的搜索结果。

【讨论】:

以上是关于Spring LDAP 1.3.0 澄清的主要内容,如果未能解决你的问题,请参考以下文章

Spring 3,Spring Security,LDAP,如何向 LDAP 添加角色?

cas完全是sprin框架写的么

Spring LDAP vs UnboundId LDAP

Spring-Ldap连接Ldap及简单的增删查改

Spring LDAP 不适用于 LDAP 模板

Spring 安全 ldap 连接管理