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 澄清的主要内容,如果未能解决你的问题,请参考以下文章