|
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级别也是有效的方法。
|
一共有 1 条评论
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]