2012-08-28 8 views
1

I가 사용자 인증을하는 동안 예외가 다음 무엇입니까 :이 같은 ApplicationContext의 값을 사용하는 경우봄 LDAP : InvalidNameException :/: [LDAP : 오류 코드 (34)

하기 :

<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에서 유효한 문자이지만, 아마도 쉼표 ,이어야합니다. 이미 전체 DN을 넣어, 당신은 사용자 DN 마찬가지로

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

필요가 없습니다 또한 Distinguished Names

+0

나는 ldap url로 기본을 추가 했으므로 그것이 나오기는하지만 제거한 후에 다른 예외가 생깁니다. –

1

참조하십시오.

<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에서 공백을 피할 것입니다.)