1.打开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,rootdn
suffix "dc=openv,dc=com"//目录
rootdn "cn=Manager,dc=openv,dc=com"//用户名
rootpw yale //明文密码(你可以用命令: slappasswd -h {MD5} -s yale 算出加密的密码 {MD5} 取代配置中的 yale)
3. 启动 openldap
CMD 进入到 c:\openldap 下,运行命令 slapd -d 1
用可以看到控制台下打印一片信息,openldap 默认是用的 Berkeley DB 数据库存储目录数据的。
如果你安装时选择了安装 install OpenLDAP-slapd as NT service 服务,你可以在系统服务中启动 OpenLDAP Directory Service。
4.定义一个XXXX.ldif的文件(目录)
如:文件内容如下
#定义最顶层的目录入口
dn: dc=openv,dc=com
objectClass: dcObject
objectClass: organization
o: Open-V
dc: openv
#定义Manager用户
dn: cn=Manager,dc=openv,dc=com //同slapd.conf文件内容相同
objectclass: organizationalRole
cn: Manager
description: OpenLDAP Manager
#定义含有用户的目录入口
dn: ou=users,dc=openv,dc=com
objectClass: organizationalUnit
ou: users
#定义qiujinyong用户
dn: uid=qiujinyong,ou=users,dc=openv,dc=com
objectClass: inetOrgPerson
sn: qiujinyong
cn: qiujinyong
uid: qiujinyong
userPassword: qiujinyong
#定义yale用户
dn: uid=yale,ou=users,dc=openv,dc=com
objectClass: inetOrgPerson
sn: yale
cn: yale
uid: yale
userPassword: yale
#定义含有角色的目录入口
dn: ou=groups,dc=openv,dc=com
objectClass: organizationalUnit
ou: groups
#定义ROLE_USER角色
dn: cn=ROLE_USER,ou=groups,dc=openv,dc=com
objectClass: groupOfNames
cn: ROLE_USER
member: uid=yale,ou=users,dc=openv,dc=com
member: uid=qiujinyong,ou=users,dc=openv,dc=com
#定义ROLE_SUPERVISOR角色
dn: cn=ROLE_SUPERVISOR,ou=groups,dc=openv,dc=com
objectClass: groupOfNames
cn: ROLE_SUPERVISOR
member: uid=qiujinyong,ou=users,dc=openv,dc=com
5.执行命令:ldapadd -x -D "cn=Manager,dc=openv,dc=com(同slapd.conf文件内容相同)" -w 密码 -f XXX.ldif(文件路径为绝对路径)
出现如下数据,表示导入正确:
6.启动客户端工具JXplorer(没有的话,请下载)
进行如下配置,配置内容如上述所定义
出现下面界面表示配置成功
如果想确认配置是否成功,写一个测试例子,如下
package yale.test; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingException; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; public class LdapTest { @SuppressWarnings("unchecked") public static void main(String[] args) { String root = "dc=openv,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=openv,dc=com" ); env.put(Context.SECURITY_CREDENTIALS, "yale" ); 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 } } } }
打印出 认证成功 ,表示配置成功!