2012-08-28 60 views
1

我得到以下异常而认证用户:春LDAP:InvalidNameException:/:[LDAP:错误代码34

如果我用值的applicationContext这样的:

<property name="url" value="ldap://10.10.10.10:389/DC=lab2,DC=ins" /> 
<property name="base" value="DC=lab2,DC=ins" /> 
<property name="userDn" value="CN=Ldap Bind,OU=Service Accounts,OU=TECH,DC=lab2,DC=ins" /> 

例外是:

Exception in thread "main" org.springframework.ldap.InvalidNameException: /: [LDAP: error code 34 - 0000208F: NameErr: DSID-031001BA, problem 2006 (BAD_NAME), data 8349, best match of: 
    'DC=lab2,DC=ins/dc=lab2,dc=ins' 

否则,如果应用程序上下文是这样的:

<property name="url" value="ldap://10.10.10.10:389" /> 
<property name="base" value="DC=lab2,DC=ins" /> 
<property name="userDn" value="CN=Ldap Bind,OU=Service Accounts,OU=TECH,DC=lab2,DC=ins" /> 

异常将是:

Exception in thread "main" org.springframework.ldap.PartialResultException: nested exception is javax.naming.PartialResultException [Root exception is javax.naming.CommunicationException: lab2.ins:389 [Root exception is java.net.UnknownHostException: lab2.ins]] 
    at org.springframework.ldap.support.LdapUtils.convertLdapException(LdapUtils.java:205) 

身份验证方法:

public boolean authenticate(String userName, String password) { 
    AndFilter filter = new AndFilter(); 
    filter.and(new EqualsFilter("objectclass", "person")).and(
       new EqualsFilter("sAMAccountName", userName)); 
    return ldapTemplate.authenticate(DistinguishedName.EMPTY_PATH, filter 
       .toString(), password); 
} 

的applicationContext.xml

<bean id="contextSource" 
     class="org.springframework.ldap.core.support.LdapContextSource"> 
    <property name="url" value="ldap://10.10.10.10:389" /> 
    <property name="base" value="DC=lab2,DC=ins" /> 
    <property name="userDn" value="CN=Ldap Bind,OU=Service Accounts,OU=TECH,DC=lab2,DC=ins" /> 
    <property name="password" value="secret" /> 
    <property name="baseEnvironmentProperties"> 
     <map> 
      <entry key="java.naming.referral"> 
       <value>follow</value> 
      </entry> 
     </map> 
    </property> 
</bean> 
<bean id="ldapTemplate" class="org.springframework.ldap.core.LdapTemplate"> 
    <constructor-arg ref="contextSource" /> 
</bean> 
<bean id="ldapContact" 
     class="ldap.ContactLDAP "> 
    <property name="ldapTemplate" ref="ldapTemplate" /> 
</bean> 

识别TestClass:

Resource r = new ClassPathResource("applicationContext.xml"); 
BeanFactory factory = new XmlBeanFactory(r); 
ContactLDAP contact = (ContactLDAP) factory.getBean("ldapContact"); 

System.out.println(contact.authenticate("username", "secret")); 

我在这里错过了什么?

回答

0

在专有名称中有一个斜杠/字符。虽然这是DN中的合法字符,但也许它应该是逗号,。也Distinguished Names

+0

我已经添加了基地ldap网址,这就是为什么它来了,但删除后,我收到了一些其他异常。 –

1

发现你并不需要

<property name="base" value="DC=lab2,DC=ins" /> 

如用户DN,你已经把完整DN。

<bean id="contextSource" 
      class="org.springframework.ldap.core.support.LdapContextSource"> 
      <property name="url" value="ldap://10.10.10.10:389" /> 
      <property name="userDn" value="CN=Ldap Bind,OU=Service Accounts,OU=TECH,DC=lab2,DC=ins" /> 
      <property name="password" value="secret" /> 

... 

这应该有效。 (但我会避免在DN中的空格)

相关问题