和网上流传的教程: http://www.lifv.cn/?p=462
OpenLDAP下载地址: http://download.bergmans.us/openldap/openldap-2.2.29/openldap-2.2.29-db-4.3.29-openssl-0.9.8a-win32_Setup.exe 下载后点击安装即可。
配置sldap.conf :在安装目录下找到sldap.conf ,修改配置如下:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
启动OpenLDAP:进入cmd命令行,跳转到OpenLDAP安装目录下,运行:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
再开一个cmd,跳转到OpenLDAP安装目录下。
测试OpenLDAP是否正常启动:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
使用引号。
如果返回:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
增加一个条目:
1.做一个LDIF文件
2.使用ldapadd命令
1.在安装目录下,新建文件example.ldif,输入如下内容:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
2.cmd在安装目录下,运行:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
可能会要求输入密码:secret (配置文件里写的这个密码)
添加条目成功后,会有提示: adding new entry cn=Manager,dc=example,dc=com简单查询:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
查询成功后,会返回刚才插入的条目。
JNDI连接OpenLDAP
Java的JNDI接口很强大,可以连接LDAP服务。
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
public class TestOpenLDAP {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TestOpenLDAP LDAPTest1 = new TestOpenLDAP();
String root = " dc=example,dc=com " ; // root
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, " com.sun.jndi.ldap.LdapCtxFactory " );
env.put(Context.PROVIDER_URL, " ldap://localhost/ " + root);
env.put(Context.SECURITY_AUTHENTICATION, " simple " );
env.put(Context.SECURITY_PRINCIPAL, " cn=Manager,dc=example,dc=com " );
env.put(Context.SECURITY_CREDENTIALS, " secret " );
DirContext ctx = null ;
try {
ctx = new InitialDirContext(env);
System.out.println( " 认证成功 " );
}
catch (javax.naming.AuthenticationException e) {
e.printStackTrace();
System.out.println( " 认证失败 " );
}
catch (Exception e) {
System.out.println( " 认证出错: " );
e.printStackTrace();
} if (ctx != null ) {
try {
ctx.close();
}
catch (NamingException e) {
// ignore
}
}
}
}
问题:
1. 图形化界面LDAPBrowser的配置
下载地址: http://files.blogjava.net/Unmi/LdapBrowser282.rar
解压后进入LdapBrowser282目录,打开配置文件OpenLdap_Localhost.cfg
修改配置:
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/4f1150b881333f12a311ae9ef34da474.gif)
2. OpenLDAP的语法,内置ObjectClass
LDAP学习
entry(record,directory object) 条目 一条数据 相当于数据表的一条记录
entry由若干个attribute组成,objectclass是必须的attribute,用于描述entry的schema
attribute是name/value对形式,例如cn = liuxuanyu cn = mengke 一个name 可以对应多个值
container是一种特殊的entry,为数据的组织和管理提供一个继承体系结构,例如ou
任何entry都可以在特定的情况下变成container
与关系数据库的比较:
LDAP读操作性能高,写操作性能不如DB,DB 读写均可,读操作性能不如LDAP
数据结构不同
LDAP适合于存储继承结构的数据
namespace
DN (distinguish name) DN是entry的名字,entry的唯一标识
RDN (relative distinguish name) entry在某个容器范围内的标识
CN (common name) 常用名称 习惯上被用作RDN
DC (domain component) 域名
LDAP只允许树形结构
object identifier (OID) 例如:2.5.4.3 它是属性类型的标识符
schema
object class 定义了entry的类型
有三种类型的object Class: 抽象类、辅助类和结构化类。
构造schema的方式 :
1. 组合现有的object class
2. 扩展现有的object class 继承 使用辅助类(实际上是一种聚合关系)
The subschema publishes the schema to clients
inetOrgPerson is a contemporary definition for a person entry RFC 2798
3. JLDAP与JNDI的比较
JLDAP是由novel开发的,原是针对Novel的NDS目录设计的JAVA访问工具。NOVEL的NDS和网景(NETSCAPE)的目录是工具界最早的目录产品。JLDAP并非JNDI的服务供应者,而是同一抽象层次下的访问工具集。与JNDI-LDAP相比,JLDAP更接近于类关系数据库的访问方式。
NDS是遵守LDAP协议的并进行了扩展的类MAD产品。而NOVEL也已把JLDAP捐献给了OPENLDAP开源项目,可以世界范围内自由使用。与 JNDI相比,JLDAP无须继承DirContext才能实现添加,也无需预先生成添加的类,可以象普通数据访问那样,生成连接,然后使用::add方法添加。这样,添加的灵活性要强于JNDI。
但由于JLDAP目前是访问NDS,因此,它不具备JNDI完全面向对象存储的能力,对于高级的LDAP应用,JLDAP不是合适的选择。
4. OpenLDAP的深入管理