spring-ldap

原创 2008年09月30日 13:01:00
 
最近一直在弄spring 与lapd的配置,上网查了不少资料,大部分中文的资料都是相似的,而且讲的也不是很好,有的只给个配置文件,连个测试类都不给下。好不容易找了个英文的,觉得讲的不错,(http://www.javaworld.com/javaworld/jw-06-2007/jw-06-springldap.html?page=2 ),完完整整的把文章看完了,然后又照着做了几个方法,在自己的
Myeclipse下测试并通过。下面是我做的例子:
首先建个web project,导入spring capabilities,要选择jar包,spring AOPSpring JDBC
Spring Core ,Spring Persistence Spring Web,可以看下我的jar包(下图):
rurl4_b=12e2687cc725ad5e6f83aae40109604cafec2b5fe3076d0ba1ffa7bdc5ffeacfdb1febc1edfa830bac4e836024dc3f97d16d610e588f69b421e2051e8b00288476cf20cce800f32611b8b00c4d61a7de62aa7693


在上面还有个struts1.2包,在这里先不有管它(整合Struts用的),还有个Referenced 库,在这里面有个Spring-ldap-1.2.1.jar包(如图)
rurl4_b=12e2687cc725ad5e6f83aae40109604cc86b14e70b79552121ee76984ec86f560db2b2f4cb9f42ca3636284fc4ddc3b7e94d30fbed73593e211534f93801a4bb233704ac2980b9ad0e5eb0a0ce3631309d6c460f

这个包myeclipse是没有的,可以在http://www.springframework.org/ldap去下这个jar包。
到此jar包是导完了,接下来是接口和接口类。(为了简单,我把接口和类的代码只定义了一个方法,可以跳过粉红色的代码,只看后面的简单代码。)
接口的代码:
package whut.com.ldap;

import java.util.List;

publicinterface ContactDAO {
    public List getAllContactNames();
    public List getContactDetails(String commonName,String lastName);
    publicvoid insertContact(ContactDTO contactDTO);
    publicvoid updateContact(ContactDTO contactDTO);
    publicvoid deleteContact(ContactDTO contactDTO);
    public List getByCn(String cn);
    public List getBySn(String sn);

}
接口类的代码:
package whut.com.ldap;

import java.util.List;

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

import org.springframework.ldap.core.AttributesMapper;
import org.springframework.ldap.core.DistinguishedName;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.filter.AndFilter;
import org.springframework.ldap.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 ContactAttributeMapper(){
                     public Object mapFromAttributes(Attributes attrs)
                     throws NamingException{
                            return attrs.get("cn").get();
                     }
              });
       }
       public List getByCn(String cn){
              AndFilter andFilter=new AndFilter();
              andFilter.and(new EqualsFilter("cn",cn));
              return ldapTemplate.search("uid=employee", andFilter.encode(),
                         new ContactAttributeMapper());
       }

       public List getBySn(String sn){
              AndFilter andFilter=new AndFilter();
              andFilter.and(new EqualsFilter("sn",sn));
              return ldapTemplate.search("uid=employee", andFilter.encode(),
                         new ContactAttributeMapper());
       }

       public List getContactDetails(String firstName,String lastName){
              AndFilter andFilter=new AndFilter();
              andFilter.and(new EqualsFilter("objectclass","person"));
              andFilter.and(new EqualsFilter("cn",firstName));
              andFilter.and(new EqualsFilter("sn",lastName));
           System.out.println("LDAP query :"+andFilter.encode());
           return ldapTemplate.search("", andFilter.encode(),
                         new ContactAttributeMapper());
       }
       public void insertContact(ContactDTO contactDTO){
              Attributes personAttributes=new BasicAttributes();
              BasicAttribute personBasicAttribute=new BasicAttribute("objectclass");
           personBasicAttribute.add("person");
           personAttributes.put(personBasicAttribute);
           personAttributes.put("cn",contactDTO.getCommonName());
           personAttributes.put("sn",contactDTO.getLastName());
           personAttributes.put("description",contactDTO.getDescription());
           DistinguishedName newContactDN=new DistinguishedName("uid=employee");
           newContactDN.add("cn",contactDTO.getCommonName());
           ldapTemplate.bind(newContactDN, null, personAttributes);

       }
       public void updateContact(ContactDTO contactDTO){
              Attributes personAttributes=new BasicAttributes();
              BasicAttribute personBasicAttribute=new BasicAttribute("objectclass");
              personBasicAttribute.add("person");
              personAttributes.put(personBasicAttribute);
              personAttributes.put("cn",contactDTO.getCommonName());
              personAttributes.put("sn",contactDTO.getLastName());
              personAttributes.put("description",contactDTO.getDescription());
              DistinguishedName newContactDN=new DistinguishedName("uid=employee");
              newContactDN.add("cn",contactDTO.getCommonName());
              ldapTemplate.rebind(newContactDN, null, personAttributes);
       }
       public void deleteContact(ContactDTO contactDTO){
              DistinguishedName newContactDN=new DistinguishedName("uid=employee");
              newContactDN.add("cn",contactDTO.getCommonName());
              ldapTemplate.unbind(newContactDN);
       }
}
可能写的方法有点多,对于初学者(本人也是,哈哈)我们可以只定义一个方法,把上面
接口和类简单点:
package whut.com.ldap;

import java.util.List;

publicinterface ContactDAO {
    public List getAllContactNames();
    }
接口类:
package whut.com.ldap;

import java.util.List;

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

import org.springframework.ldap.core.AttributesMapper;
import org.springframework.ldap.core.DistinguishedName;
import org.springframework.ldap.core.LdapTemplate;
import org.springframework.ldap.filter.AndFilter;
import org.springframework.ldap.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("cn").get();
                     }
              });
       }
这里只做一个方法的测试。
(注意简单的getAllContactNames方法中的new AttributesMApper()与上面的不同)
接着当然是application.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="contextSource"  
     class="org.springframework.ldap.core.support.LdapContextSource">  
        <property name="url" value="ldap://localhost:389" />  
        <property name="base" value="o=tcl,c=cn" />  
        <property name="userDn" value="cn=Manager,o=tcl,c=cn" />  
        <property name="password" value="secret" />  
    </bean>  
    <bean id="ldapTemplate"
    class="org.springframework.ldap.core.LdapTemplate" >
    <constructor-arg>
        <ref bean="contextSource" />
    </constructor-arg>
    </bean>
    <bean id="ldapContact" class="whut.com.ldap.LDAPContactDAO">
    <property name="ldapTemplate">
        <ref bean="ldapTemplate" />
    </property>
    </bean>
  </beans>
contextSource bean 是用来和ldap连接的(注意有的class中可能这样定义:
class="org.springframework.ldap.support.LdapContextSource")少了个core.
应该是版本不同,可以在referenced 库下的spring-ldap.jar包下去查看。

Base 是你的ldap 的基准dnldap的基准dn3种定义方式,你也可以用dc=***dc=**来代替你的基准dn,但必须是你的基准dn,在openldap里的slapd.conf可以查看), 接着是用户和密码 <property name="userDn" value="cn=Manager,o=tcl,c=cn" />  
        <property name="password" value="secret" />  
有的userDn也用userName代替,(不知道有什么区别)。
下面的我就不多说了<bean id="ldapTemplate"
    class="org.springframework.ldap.core.LdapTemplate" >
    <constructor-arg>
(注意下有没有core,和上面的contextSource bean一样)。
最后一个bean
<bean id="ldapContact" class="whut.com.ldap.LDAPContactDAO">
    <property name="ldapTemplate">
        <ref bean="ldapTemplate" />
    </property>
    </bean>
使用的是spring的注入。(了解spring都应该知道的。)
到此我们的application.xml配置文件就搞定了。下面就写个测试类:(代码如下)
package whut.com.ldap;
import java.util.List;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import org.springframework.dao.DataAccessException;

publicclass SpringFrameworkLDAP {
    publicstaticvoid main(String[] args) {
       try {
        //Resource resource = new ClassPathResource("applicationContext.xml");
           //BeanFactory factory=new XmlBeanFactory(resource);
        // ContactDAO ldapContact = (LDAPContactDAO)factory.getBean("ldapContact");
        ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
           ContactDAO ldapContact = (LDAPContactDAO)ctx.getBean("ldapContact");
            List contactList = ldapContact.getAllContactNames();
            for( int i = 0 ; i < contactList.size(); i++){
                System.out.println("Contact Name " + contactList.get(i));
            }  
        } catch (DataAccessException e) {
            System.out.println("Error occured " + e.getCause());
      }
    }
}
在英文资料中给的是我注释的连接方式来得到一个实例的。(本人不太了解,所以用最简单的了。)到此一个简单的spring和ldap的应用就完了。
在英文资料中还有ContactDTO类和ContactAttributeMapper类。感兴趣的可以
看下英文资料
http://www.javaworld.com/javaworld/jw-06-2007/jw-06-springldap.html?page=2

Spring-ldap Filter

Spring-ldap Filter  类: org.springframework.ldap.filter.AndFilter :且 org.springframework.ldap.fi...
  • aoxida
  • aoxida
  • 2013年08月22日 09:22
  • 1787

spring-ldap学习(二)

上一篇介绍了搭建ldap服务,通过GUI风格的ldapsoft ldap admin tool去连接ldap服务端以及介绍了spring-ldap的增删改查,本文将介绍spring data 式的风格...
  • Victor_Cindy1
  • Victor_Cindy1
  • 2017年05月20日 15:06
  • 663

2017.4.10 spring-ldap官方文档学习

官网:http://www.springframework.org/ldap 官方文档及例子(重要):http://docs.spring.io/spring-ldap/docs/2.1.0.REL...
  • liyuhui195134
  • liyuhui195134
  • 2018年01月04日 16:39
  • 9

LDAP用户验证(Spring-LDAP)

LDAP-Lightweight Directory Access Protocol。LDAP服务器可以是任何一个开源或商用的LDAP目录服务器,而客户端都可以使用同样的协议、客户端连接软件包和查询命...
  • educast
  • educast
  • 2015年06月15日 13:16
  • 1604

spring-ldap基本使用总结

目录 1.spring-ldap的pom依赖2.ldapTemplate的生成--方式1自动注入 2.1 spring-ldap声明2.2 ldapTemplate bean2.3 使用 3.ld...
  • awj321000
  • awj321000
  • 2017年12月20日 14:28
  • 54

spring-ldap学习(一)

1、搭建ldap服务,我用的系统是Ubuntu14.04,具体可以参考这篇文章:ubuntu14.04搭建ldap服务,按照步骤来没什么问题。   安装之后访问地址为:http://10.8.12.1...
  • Victor_Cindy1
  • Victor_Cindy1
  • 2017年05月18日 15:39
  • 1403

Spring-ldap 操作LDAP

Spring-ldap 操作LDAP:  Spring-ldap 地址: http://www.springsource.org/ldap/(进入) Spring 版本: spring-fra...
  • educast
  • educast
  • 2015年06月15日 15:11
  • 8484

SpringLDAP 简单的用户登陆认证

今天主要实验了下用户的登录验证,在PersonDaoImpl类中增加了验证方法具体代码:还是PersonDaoImpl类 1. public class PersonDaoImpl impleme...
  • xufaxi
  • xufaxi
  • 2010年08月26日 14:49
  • 4911

2017.6.8 spring-ldap基本使用总结

之前学习过spring-ldap的官方文档:2017.4.10 spring-ldap官方文档学习 现在是对实际使用的spring-ldap及使用过程中遇到的问题,进行总结。   1.sprin...
  • liyuhui195134
  • liyuhui195134
  • 2018年01月04日 16:40
  • 6

【Spring】官网教程阅读笔记(四):使用LDAP对用户鉴权

【前言】再接再厉,LDAP鉴权或许能用到。本文给了两个application作为参照,第一个是普通的webApplication,没有用户鉴权,第二个有用户鉴权。如果看过第一篇,可以直接跳到第二个ap...
  • arctan90
  • arctan90
  • 2015年03月31日 10:55
  • 2780
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:spring-ldap
举报原因:
原因补充:

(最多只允许输入30个字)