Spring LDAP 1.3.0澄清

时间:2010-07-29 11:07:47

标签: java spring ldap spring-security spring-ldap

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

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);

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

LDAP 32就像eDirectory -601和AD一样(我忘记了代码)。

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