2012-09-10 5 views
2

나는 ADS에 대해 사용자를 인증해야합니다. 그 전에 ADS에서 사용자 및 사용자 세부 정보를 가져와야합니다. 스프링과 LDAP를 사용하고 있습니다. 아무도 나에게 이것을 할 수있는 좋은 방법을 제안 할 수 있습니까? 예가 도움이 될 것입니다.LDAP 인증

답변

2

우리는 필요한 모든 라이브러리가 필요합니다. 이 링크를 사용하여 모든 jar 파일을 다운로드 할 수 있습니다. http://hotfile.com/dl/9807349/836e03e/final_jar_col.rar.html 여기에는 commons 라이브러리, log4j 등 필요한 모든 파일이 들어 있습니다.

다음 클래스를 생성하십시오. 모든 클래스는 하나의 패키지 디렉토리에 배치 할 수 있습니다. 패키지를 패키지 디렉토리에 추가 할 수 있습니다.

두 가지 기능을 정의하십시오. 하나는 모든 연락처 이름을 얻기위한 것이고, 다른 하나는 연락처 세부 정보를 얻는 것입니다.

import java.util.List; 

public interface ContactDAO { 

    public List getAllContactNames(); 

    public List getContactDetails(String commonName); 

} 

LDAPContactDAO 정의 된 인터페이스를 구현한다.

import java.util.List; 

import javax.naming.NamingException; 
import javax.naming.directory.Attributes; 
import javax.naming.directory.BasicAttribute; 
import javax.naming.directory.BasicAttributes; 

import org.springframework.ldap.AttributesMapper; 
import org.springframework.ldap.LdapTemplate; 
import org.springframework.ldap.support.DistinguishedName; 
import org.springframework.ldap.support.filter.AndFilter; 
import org.springframework.ldap.support.filter.EqualsFilter; 

public class LDAPContactDAO implements ContactDAO{ 
    private LdapTemplate ldapTemplate; 

    public void setLdapTemplate(LdapTemplate ldapTemplate) { 
     this.ldapTemplate = ldapTemplate; 
    } 

    public List getAllContactNames() { 
     return ldapTemplate.search("", "(objectClass=person)", 
       new AttributesMapper() { 
        public Object mapFromAttributes(Attributes attrs) 
          throws NamingException { 
         return attrs.get("mail").get(); 
        } 
       }); 
    } 

    public List getContactDetails(String objectclass){ 
     AndFilter andFilter = new AndFilter(); 
     andFilter.and(new EqualsFilter("objectClass",objectclass)); 
     System.out.println("LDAP Query " + andFilter.encode()); 
     return ldapTemplate.search("", andFilter.encode(),new ContactAttributeMapper()); 

    } 
} 

springldap.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> 
<beans> 
    <bean id="contextSource" 
     class="org.springframework.ldap.support.LdapContextSource"> 
     <property name="url" value="ldap://your.ldap.url:389" /> 
     <property name="base" value="base, be careful to put it right" /> 
     <property name="userName" value="your username" /> 
     <property name="password" value="password" /> 
    </bean> 
    <bean id="ldapTemplate" class="org.springframework.ldap.LdapTemplate"> 
     <constructor-arg ref="contextSource" /> 
    </bean> 
    <bean id="ldapContact" 
     class="com.javaworld.sample.LDAPContactDAO"> 
     <property name="ldapTemplate" ref="ldapTemplate" /> 
    </bean> 
</beans> 

ContactAttributeMapper

import javax.naming.NamingException; 
import javax.naming.directory.Attribute; 
import javax.naming.directory.Attributes; 

import org.springframework.ldap.AttributesMapper; 

public class ContactAttributeMapper implements AttributesMapper{ 

    public Object mapFromAttributes(Attributes attributes) throws NamingException { 
     ContactDTO contactDTO = new ContactDTO(); 

     Attribute mail = attributes.get("mail"); 
     Attribute sap = attributes.get("employeeNumber"); 
     if(mail != null) 
      contactDTO.setMail((String)mail.get()); 
     if(sap != null) 
      contactDTO.setSap((String)sap.get()); 

     return contactDTO; 
    } 

} 

ContactDTO

public class ContactDTO { 

    String mail; 
    String sap; 
    public String getSap() { 
     return sap; 
    } 
    public void setSap(String sap) { 
     this.sap = sap; 
    } 
    public String getMail() { 
     return mail; 
    } 
    public void setMail(String mail) { 
     this.mail = mail; 
    } 

    public String toString() { 
     StringBuffer contactDTOStr = new StringBuffer("Person=["); 

     contactDTOStr.append(" mail = " + mail); 
     contactDTOStr.append(" ]"); 
     return contactDTOStr.toString(); 
    } 
} 

테스트 클래스 : SpringFrameworkLDAPClient

import java.util.List; 
import org.springframework.beans.BeansException; 
import org.springframework.beans.factory.BeanFactory; 
import org.springframework.beans.factory.xml.XmlBeanFactory; 
import org.springframework.core.io.ClassPathResource; 
import org.springframework.core.io.FileSystemResource; 
import org.springframework.core.io.Resource; 
import org.springframework.dao.DataAccessException; 

public class SpringFrameworkLDAPClient { 

    public static void main(String[] args) { 
     //Resource resource = new ClassPathResource("/SpringLDAPClient/src/com/javaworld/sample/springldap.xml"); 
     //System.out.println(resource.toString()); 
     try { 
      Resource resource = new ClassPathResource("springldap.xml"); 
      BeanFactory factory = new XmlBeanFactory(resource); 
      System.out.println(factory.toString() + "\n"); 

      ContactDAO ldapContact = (LDAPContactDAO)factory.getBean("ldapContact");  

      List contactList = ldapContact.getContactDetails("30662"); 
      //List contactList =ldapContact.getAllContactNames(); 
      //System.out.println(contactList.size()); 
      int count = 0; 
      for(int i = 0 ; i < contactList.size(); i++){ 
       System.out.print("Email: " + ((ContactDTO) contactList.get(i)).getMail() + " "); 
       System.out.println("SAP: " + ((ContactDTO) contactList.get(i)).getSap()); 
       count++; 
      } 
      System.out.println("\n" + count); 

     } catch (DataAccessException e) { 
      System.out.println("Error occured " + e.getCause()); 
     } 
    } 
} 

먼저 도메인의 세부 정보를 얻으려면 활성 디렉토리 탐색기를 사용하십시오. 그에 따라 위의 작업을 수행하십시오.

+0

작동합니다. 고마워... –