日志文章

2007年07月11日 09:51:08

spring-ldap实例之一

spring-ldap提供了类似于spring jdbc模板的方法访问ldap。比之jdk中的方法会简单不少。

首先,新建java project,加入spring、spring-ldap及其它相关库。新建包com.yang.ldap.demo。为简单起见,所有类及配置文件都放在此处。新建类UserDaoLdapImpl(其它实现与此无关,进而接口在此处也去掉了)。内容如下:

package com.yang.ldap.demo;

import java.util.List;

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

import org.springframework.ldap.AttributesMapper;
import org.springframework.ldap.LdapTemplate;


/**
* @author yangbagang
*
*/
public class UserDaoLdapImpl {

  private LdapTemplate ldapTemplate;

  public void setLdapTemplate(LdapTemplate ldapTemplate) {
    this.ldapTemplate = ldapTemplate;
  }
 
  public List getAllPersonNames() {
    return ldapTemplate.search(
          "","(objectclass=person)",
          new AttributesMapper() {
            public Object mapFromAttributes(Attributes attrs) throws NamingException {
                return attrs.get("cn").get();
            }
          });
  }
 
  public List getAllPersons() {
    return ldapTemplate.search(
          "", "(objectclass=person)", new PersonAttributesMapper());
  }
 
  public Person getPersonByDn(String dn) {
    return (Person)ldapTemplate.lookup(dn, new PersonAttributesMapper());
  }
 
  private class PersonAttributesMapper implements AttributesMapper {

    public Object mapFromAttributes(Attributes attrs) throws NamingException {
        Person person = new Person();
        person.setCn((String) attrs.get("cn").get());
        person.setSn((String) attrs.get("sn").get());
        return person;
    }
   
  }
}

此处对Person也进行了简化。内容如下:

package com.yang.ldap.demo;

/**
* @author yangbagang
*
*/
public class Person {

  private String cn;
 
  private String sn;

  public String getCn() {
    return cn;
  }

  public void setCn(String cn) {
    this.cn = cn;
  }

  public String getSn() {
    return sn;
  }

  public void setSn(String sn) {
    this.sn = sn;
  }
 
}
新建spring配置文件applicationContext.xml,内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
  <bean id="ldapSource" class="org.springframework.ldap.support.LdapContextSource">
    <property name="url" value="ldap://localhost:389" />
    <property name="base" value="dc=yang,dc=com" />
    <property name="userName" value="cn=root,dc=yang,dc=com" />
    <property name="password" value="secret" />
  </bean>
 
  <bean id="ldapTemplate" class="org.springframework.ldap.LdapTemplate">
    <constructor-arg ref="ldapSource" />
  </bean>
 
  <bean id="userDao" class="com.yang.ldap.demo.UserDaoLdapImpl">
    <property name="ldapTemplate"><ref bean="ldapTemplate"/></property>
  </bean>
</beans>
开发所用ldap为openldap for windows,不要尝试用此用户名与密码连接我的ldap啊,呵呵。

没有测试的方法,就等于不存在。下面写测试类TestUserDao。

package com.yang.ldap.demo;

import java.util.List;

import org.springframework.test.AbstractDependencyInjectionSpringContextTests;

/**
* @author yangbagang
*
*/
public class TestUserDao extends AbstractDependencyInjectionSpringContextTests {

  private UserDaoLdapImpl dao;
 
  public void setDao(UserDaoLdapImpl dao) {
    this.dao = dao;
  }

  public void testGetAllPersonNames() {
    List list = dao.getAllPersonNames();
    assertTrue(list.size() > 0);
  }
 
  public void testGetAllPersons() {
    List list = dao.getAllPersons();
    assertTrue(list.size() > 0);
  }
 
  public void testGetPersonByDn() {
    String dn = "cn=zhangsan,ou=sales,o=users";
    String name = "张三";
    Person person = dao.getPersonByDn(dn);
    assertTrue(name.equals(person.getSn()));
  }
 
  /* (non-Javadoc)
  * @see org.springframework.test.AbstractDependencyInjectionSpringContextTests#getConfigLocations()
  */
  @Override
  protected String[] getConfigLocations() {
    return new String[]{"classpath:/com/yang/ldap/demo/applicationContext.xml"};
  }

}
运行之后可以看到junit的green bar。
附:如果出错,请先检查一下是否使用了你自己的实际信息替代(如用户名、密码、测试的dn等),另外提高openldap的debug级别也是有效的方法。

Tags: spring   ldap  

类别: 无分类 |  评论(1) |  浏览(8906) |  收藏
1楼 [匿名]wow gold 2008年06月16日 16:37:40 Says:
cb78re
cxy98z
[url=http://brogame.com]wow gold[/url]
[url=http://itemrate.com]wow gold[/url]
[url=http://brogame.com/sitemap13.html]thsale[/url]
[url=http://oforu.com/Cheap.065.Age_of_Conan_-_US.aspx]buy AoC gold[/url]
[url=http://gosuperplayers.com]buy AoC gold[/url]
[url=http://brogame.com/Cheap.065.Age_of_Conan_-_US.aspx]age of conan gold[/url]
[url=http://itemrate.com/Cheap.065.Age_of_Conan_-_US.G.aspx]age of conan gold[/url]
[url=http://mygamestock.com/Cheap.013.World_of_Warcraft_-_US.aspx]age of conan gold[/url]
[url=http://oforu.com/Cheap.065.Age_of_Conan_-_US.aspx]age of conan gold[/url]
[url=http://gosuperplayers.com]age of conan gold[/url]
[url=http://brogame.com/Cheap.065.Age_of_Conan_-_US.aspx]buy age of conan gold[/url]
[url=http://www.careshikakunavi.com/school/2.html]全教振[/url]            
[url=http://www.iae-longre.com/country/Canada/]留学澳大利亚[/url]            
[url=http://www.iae-longre.com/News/2007/7-31/114710.html]意大利留学签证[/url]            
[url=http://www.iae-longre.com/News/2007/6-21/162626.html]加拿大签证[/url]            
[url=http://www.iae-longre.com/News/2006/8-2/195650.html]荷兰签证[/url]
[url=http://www.leexi.com]洗涤机械[/url]
[url=http://www.leexi.com]烘干机[/url]
[url=http://www.leexi.com]水洗厂[/url]
[url=http://www.leexi.com/xideshebei.htm]水洗厂[/url]
[url=http://www.leexi.com/jiamengganxiliansuo.html]水洗厂[/url]
[url=http://www.leexi.com]洗涤机械[/url]
[url=http://www.leexi.com/xidejixie.html]洗涤机械[/url]
[url=http://www.leexi.com/xiyijishupeixunxuexiao.html]洗涤机械[/url]
[url=http://www.leexi.com]连锁店[/url]
[url=http://www.leexi.com/webs/jmfy.aspx]连锁店[/url]
[url=http://www.leexi.com/xiyijishupeixun.html]连锁店[/url]
[url=http://www.cilanie.com]干洗店连锁加盟[/url]
[url=http://www.cilanie.com]干洗店[/url]
[url=http://oofay.org]wow gold[/url]
[url=http://mmoinn.org]wow gold[/url]
[url=http://mmogap.net]wow gold[/url]
[url=http://dgamesky.net]wow gold[/url]
[url=http://gold4power.net]wow gold[/url]
[url=http://foxtod.com]wow gold[/url]
[url=http://ganpal.com]wow gold[/url]
[url=http://ganple.com]wow gold[/url]
[url=http://loxworld.com]wow gold[/url]
[url=http://loxfad.com]wow gold[/url]
[url=http://ferila.com]wow gold[/url]
发表评论