隔叶黄莺 The Blog of Unmi

〖隔叶黄莺三四声,挂壁飞瀑千万尘。若是人间无净土,此处为何妙语真! 隔叶黄莺四字,本非取自此句,而有寄寓他意,因见妙语,亦与予心合!〗

BlogJava 首页 新随笔 联系 聚合 管理
  380 Posts :: 106 Stories :: 1179 Comments :: 0 Trackbacks

openldap 比起其他商业目录服务器(比如 IBM Directory Server),特别的轻巧,十分适合于本地开发测试用,在产品环境中的表现也很优秀。

openldap 软件在它的官方网站 http://www.openldap.org, 不过下载过来是源代码,并没有包含 win32 下的 Makefile 文件,只提供了在 Unix/Linux 下编译用的 Makefile。所以相应的在网上介绍在 windows 下安装使用 openldap 的资料比较少,而在 Unix/Linux 下应用文档却很丰富。

本文实践了在 Windows 下安装配 openldap,并添加一个条目,LdapBrowser 浏览,及 Java 程序连接 openldap 的全过程。

1. 下载安装 openldap for windows,当前版本2.2.29
    下载地址:http://download.bergmans.us/openldap/openldap-2.2.29/openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe
    相关链接:http://lucas.bergmans.us/hacks/openldap/
   安装很简单,一路 next 即可,假设我们安装在 c:\openldap

2. 配置 openldap,编辑 slapd.conf 文件
   1) 打开 c:\openldap\slapd.conf,找到
    include  ./schema/core.schema,在它后面添加
    include  ./schema/cosine.schema
    include  ./schema/inetorgperson.schema

    接下来的例子只需要用到以上三个 schema,当然,如果你觉得需要的话,你可以把其他的 schema 全部添加进来
    include  ./schema/corba.schema
    include  ./schema/dyngroup.schema
    include  ./schema/java.schema
    include  ./schema/misc.schema
    include  ./schema/nis.schema
    include  ./schema/openldap.schema

   2) 还是在 slapd.conf 文件中,找到
    suffix  "dc=my-domain,dc=com"
    rootdn  "cn=Manager,dc=my-domain,dc=com"
    把这两行改为
    suffix "o=tcl,c=cn" 
    rootdn "cn=Manager,o=tcl,c=cn" 

    suffix 就是看自己如何定义了,后面步骤的 ldif 文件就必须与它定义了。还要注意到这个配置文件中有一个 rootpw  secret,这个 secret 是 cn=Manager 的密码,以后会用到,不过这里是明文密码,你可以用命令: slappasswd -h {MD5} -s secret 算出加密的密码 {MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ== 取代配置中的 secret。

3. 启动 openldap
    CMD 进入到 c:\openldap 下,运行命令 slapd -d 1
    用可以看到控制台下打印一片信息,openldap 默认是用的 Berkeley DB 数据库存储目录数据的。
    如果你安装时选择了安装 install OpenLDAP-slapd as NT service 服务,你可以在系统服务中启动 OpenLDAP Directory Service。

4. 建立条目,编辑导入 ldif 文件
   1) 新建一个 ldif(LDAP Data Interchanged Format) 文件(纯文本格式),例如 test.ldif,文件内容如下:
    
dn: o=tcl,c=cn
objectClass: dcObject
objectClass: organization
o: tcl
dc: com

dn: uid=Unmi, o=tcl,c=cn
uid: Unmi
objectClass: inetOrgPerson
mail: fantasia@sina.com
userPassword:: MTIzNDU2
labeledURI: http://unmi.blogcn.com
sn: Qiu
cn:: 6ZqU5Y+26buE6I66

   2) 执行命令:ldapadd -x -D "cn=manager,o=tcl,c=cn" -w secret -f test.ldif
    导入组织信息和一个用户 uid=Unmi 
    你可以用 LdapBrower 来导入这个 ldif 文件。

5. LdapBrowser 浏览
可点击链接 http://www.blogjava.net/Files/Unmi/LdapBrowser282.rar 下载,其中已配置好了 OpenLdap_Localhost

   1) 设置如下图所示:
LdapBrowserSettings

指定了 Host 为 localhost 之后,可以点击 Fetch DNs 按钮显示出 o=tcl,c=cn 来,如果要能在 LdapBrowser 中对数据能修改就不能用 Anonymous bind, 必须填上 User DN: cn=manager,Passwer: secret。

   2) 看到的效果是:
LdapBrowser

6. Java 连接 openldap

  1. import  java.util.Hashtable;   
  2. import  javax.naming.Context;   
  3. import  javax.naming.NamingException;   
  4. import  javax.naming.directory.DirContext;   
  5. import  javax.naming.directory.InitialDirContext;   
  6.     
  7. public   class  LDAPTest {   
  8.    public   static   void  main(String[] args) {   
  9.     LDAPTest LDAPTest1 =  new  LDAPTest();   
  10.     String root =  "o=tcl,c=cn" //root   
  11.     Hashtable env =  new  Hashtable();   
  12.     env.put(Context.INITIAL_CONTEXT_FACTORY,  "com.sun.jndi.ldap.LdapCtxFactory" );   
  13.     env.put(Context.PROVIDER_URL,  "ldap://localhost/"  + root);       
  14.     env.put(Context.SECURITY_AUTHENTICATION,  "simple" );   
  15.     env.put(Context.SECURITY_PRINCIPAL,  "cn=Manager,o=tcl,c=cn" );   
  16.     env.put(Context.SECURITY_CREDENTIALS,  "secret" );   
  17.     DirContext ctx =  null ;   
  18.      try  {   
  19.       ctx =  new  InitialDirContext(env);   
  20.       System.out.println( "认证成功" );   
  21.     }   
  22.      catch  (javax.naming.AuthenticationException e) {   
  23.       e.printStackTrace();   
  24.       System.out.println( "认证失败" );   
  25.     }   
  26.      catch  (Exception e) {   
  27.       System.out.println( "认证出错:" );   
  28.       e.printStackTrace();   
  29.     }   
  30.     
  31.      if  (ctx !=  null ) {   
  32.        try  {   
  33.         ctx.close();   
  34.       }   
  35.        catch  (NamingException e) {   
  36.          //ignore   
  37.       }   
  38.     }   
  39.   }   
  40. }  
代码中还没有实现用户的查找,读取、修改条目属性的操作

参考资料:1. 如何设置一个基本的OpenLDAP Server
           2. windows下openldap的安装与java操作测试
           3. LDAP 入门知识
           4. OpenLDAP学习笔记

下一步计划是:
    1. 完成 Apache 与 openldap 的集成
    2. 完成 Tomcat 与 openldap 的集成 
    3. 使用 spring-ldap 的 LdapTemplate 操作 openldap




[版权声明]
本站内文章,如未特别注明,均系原创或翻译之作,本人 Unmi 保留一切权利。本站原创及译作未经本人许可,不得用于商业用途及传统媒体。网络媒体可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。及此说明,重之之重。
posted on 2007-07-27 02:49 隔叶黄莺 阅读(3400) 评论(20)  编辑  收藏 所属分类: Mid-Ware

Feedback

# re: Windows下安装使用openldap 2007-11-22 14:19 无趣
问您一个简单的问题` 怎么我按您的方法去做结果把 o=tcl,c=cn 当作属性输出来 希望和您一起讨论和学习openldap `我的qq是252792733 希望尽快联系我 `!!!!  回复  更多评论
  

# re: Windows下安装使用openldap 2007-11-22 16:31 隔叶黄莺
更正一下,原来日志中的 test.ldif 文件有一个问题,其中不能直接写中文,要进行一下编码,现在已在原文中改过来了。

不然会出现以下异常
ldap_add: Invalid syntax (21)
additional info: cn: value #0 invalid per syntax  回复  更多评论
  

# re: Windows下安装使用openldap 2008-03-06 18:48 vivian
请问为什么我写test.ldif后用ldapadd命令后,在LDAP浏览器上只能看到o=tcl,c=cn的条目 而看不到Unmi条目呢 谢谢
  回复  更多评论
  

# re: Windows下安装使用openldap 2008-03-10 23:43 Unmi
执行 ldapad 命令时看后台报出了什么错误。  回复  更多评论
  

# re: Windows下安装使用openldap 2008-06-13 11:24 达到
非常感谢!!!对我很有帮助!!  回复  更多评论
  

# re: Windows下安装使用openldap 2008-08-27 09:33 heifei
请问搂主在添加条目所用的test.ldif文件中,怎么把“隔叶黄莺”转换为 “6ZqU5Y+26buE6I66”的?  回复  更多评论
  

# re: Windows下安装使用openldap 2008-08-27 10:25 隔叶黄莺
记得在 openldap 下有一个命令可以完成这种转换,你也可以用程序来自己完成,过程是
"隔叶黄莺".getBytes("UTF-8"),然后 BASE64 一下就是了。  回复  更多评论
  

# re: Windows下安装使用openldap[未登录] 2008-09-23 15:53 1
11  回复  更多评论
  

# re: Windows下安装使用openldap[未登录] 2008-09-23 16:04 1
您好:按照你所说的进行配置但是仍旧出现ldap_add: Invalid syntax (21)
additional info: cn: value #0 invalid per syntax 这个错误,你说不能出现中文,那我把cn:: 6ZqU5Y+26buE6I66设置为cn: geye为什么还是出现这个错误呢,盼回答 谢谢!可以告诉一下你的信箱么 谢谢  回复  更多评论
  

# re: Windows下安装使用openldap[未登录] 2008-09-23 16:38 1
你好在问一下,userPassword:: MTIzNDU2
与cn那里必须有双冒号么??  回复  更多评论
  

# re: Windows下安装使用openldap 2008-09-23 16:57 隔叶黄莺
在 ldif 文件中把前一段

dn: o=tcl,c=cn
objectClass: dcObject
objectClass: organization
o: tcl
dc: com

删了再试试看看。  回复  更多评论
  

# re: Windows下安装使用openldap 2009-01-15 16:23 waitingmyself
你好 我添加数据的时候提示错误 ldapadd: no DN specified
是什么原因 都是按你这样写的  回复  更多评论
  

# re: Windows下安装使用openldap 2009-01-15 16:55 隔叶黄莺
详细点呢?哪个 DN 未指定?  回复  更多评论
  

# re: Windows下安装使用openldap 2009-02-25 21:36 usky
你好,我现在想用PHP连接LDAP, 您知道怎么做吗? 我用你的方法基本已经能链接到了,但是用PHP语句:$connect = ldap_connect( "localhost", "389") ; 就会出现 Call to undefined function: ldap_connect() 这个错误。

运行这个语句 slapd.exe -d 256 ,出现 ……slapd starting 是不是表示已经启动了??

另外我想导入另一个test1.ldif 文件,但是都无法导入,应该怎么做???

  回复  更多评论
  

# re: Windows下安装使用openldap 2009-02-25 22:46 隔叶黄莺
我也正打算用 PHP 来连 LDAP,待我成功了告诉你吧。
不能导入的话,要看具体的错误提示,针对性解决。  回复  更多评论
  

# re: Windows下安装使用openldap 2009-03-02 04:29 usky
能否留个QQ,一起研究下  回复  更多评论
  

# re: Windows下安装使用openldap[未登录] 2009-05-23 09:06 stuart
我运行java程序出错,是不是要导入什么jar包啊,什么jar包,导入到哪里,谢谢,错误提示为LDAP:error code 49-Invalid Credentials  回复  更多评论
  

# re: Windows下安装使用openldap 2009-05-23 12:11 隔叶黄莺
验证失败,请检查登录 LDAP 的用户名和密码。  回复  更多评论
  

# re: Windows下安装使用openldap 2009-06-12 17:05 tyb
请问下 我配置好后使用客户端连接的时候报错了
javax.naming.NameNotFoundException: [LDAP: error code 32 - No Such Object]; remaining name 'o=tcl,c=cn'
不知道是什么原因?  回复  更多评论
  

# re: Windows下安装使用openldap 2009-06-16 14:44 隔叶黄莺
用 LdapBrowser 看一下有没有 o=tcl,c=cn
应该是你的 ldif 文件未导入成功,看看控制台下出现了什么错误提示。  回复  更多评论
  



标题  
姓名  
主页
验证码 *  
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-02-16 10:23 编辑过