一、OpenLDAP安装和配置安装还是比较简单的,一直next就好。这里记得把上面2个都选上,将LDAP注册为系统的一个服务,默认安装位置:C:\Program Files\OpenLDAP,进入安装目录,编辑slapd.conf文件:找到ucdata-path ./ucdatainclude ./schema/core.schema在下面加入:(注意你的系统路径,可能随安装位置不同而稍有差异)include ./schema/core.schema (这里是和原来有的,如果加入的话就重复包含了,不能正常启动了。应该除这句外都加入)include ./schema/corba.schemainclude ./schema/dyngroup.schemainclude ./schema/java.schemainclude ./schema/misc.schemainclude ./schema/cosine.schemainclude ./schema/nis.schemainclude ./schema/inetorgperson.schemainclude ./schema/openldap.schema这个搞定以后,在同一文件后面的(大概65-66行,修改)suffix ”o=anotherbug,c=com“ (直接拷贝过去引号会变成中文的。注意引号用英文的,会影响启动)rootdn ”cn=manager,o=anotherbug,c=com“还有第70行的位置 : rootpw secret,这里要修改为加密后的密码。具体操作:打开命令行,定位到安装目录下,输入:slappasswd -h {MD5} –s “替换为你想要设置的密码,无引号”将生成的MD5密文:{MD5}Xr4ilOzQ4PCOq3aQ0qbuaQ==填入原来secret位置。 OK至此配置已经搞定,可以测试一下服务了。打开命令行转到安装目录下输入:sldapd -d 1 注意命令是(slapd -d 1)至此LDAP服务器已经搭建并可以跑起来了.下面要来测试怎么倒入.ldif格式的数据了。 二、建立条目(Entry) ,导入 ldif 后缀名文件ldif:LDAP Data Interchange Format,基于文本。有两种类型的 LDIF 文件:第一种是描述 Directory 条目数据的,第二种是描述更新条目的。我们主要看怎么描述条目的。打开编辑器(如Editplus,UltraEdit等),新建test.ldif内容如下:dn: o=anotherbug,c=comobjectClass: dcObjectobjectClass: organizationo: anotherbugdc: comdn: uid=mousepoato, o=anotherbug,c=comuid: mousepoatoobjectClass: inetOrgPersonmail: paradise.lsj@gmail.comuserPassword: adminlabeledURI: http://anotherbug.com/blogsn: Licn: test注意ldif文件对格式的要求非常严格,属性要以冒号和空格与值隔开,并且其他地方不允许有空格。否则当你导入ldif文件时,会提示出现“ldap_add: Invalid syntax (21)”等诸多错误,另外在我机器上测试,ldif对中文支持也还不好,比如我将最后的cn: test改为 cn: 鼠标土豆,导入就会报错。写完保存到安装目录下。在命令行输入:ldapadd -c -x -D “cn=manager,o=anotherbug,c=com” -w “刚才替换secret出的密码明文” -f test.ldif运行命令后结果如下:注意我们在ldapadd后面加上了 ”–c “ 参数,他会一直运行不会因错误而终止,比如对系统已经存在的entry命令会提示但不会中止。 三、LDAP查看工具可能大家看了这么多感觉还是很抽象,我们需要一个GUI看看LDAP到底是个什么东东。这里推荐两个浏览工具1、LdapBrowser这是个Java 开发的 LDAP Browser/Editor 工具,不但跨平台(Windows, Unix-like),而且功能非常完整,速度又快。运行起来的界面时这个样子的。2、Softrra LDAP Administrator 2009这是一个比较强大和专业的客户端,涵盖了大多数企业的LDAP服务类型。一直下一步安装成功后,它的配置也是比较简单的:新建一个profile,命名为Local_LDAP 配置连接信息这是完整配置好后的效果四、通过 JNDI api操作LDAP例子Javax里面提供的JNDI为我们封装好了对LDAP 的directory service进行存取查询的函数,可以方便实用。贴上我用JUnit4写一个对LADP服务器进行测试的代码供参考:private static Logger log = Logger.getLogger(TestLdapOper.class);DirContext context = null;TestLdap tldap = null;@Beforepublic void init() throws NamingException {tldap = new TestLdap();context = tldap.getContext();// 获取context}@Test@Ignorepublic void testInsert() throws NamingException {tldap.addEntry(context, “uid=IBM,o=anotherbug,c=com”);}@SuppressWarnings(“unchecked”)@Testpublic void testGetAttributes() throws NamingException {List attNameList = new ArrayList();attNameList.add(“o”);attNameList.add(“dc”);attNameList.add(“objectClass”);Map map = JNDIUitl.getAttributes(context, “o=anotherbug,c=com”, attNameList);Iterator keyValuePairs = map.entrySet().iterator();for (int i = 0; i < map.size(); i++) {Map.Entry entry = (Map.Entry) keyValuePairs.next();Object key = entry.getKey();Object value = entry.getValue();log.info(key + “==key”);log.info(value + “–value”);}}@SuppressWarnings(“unchecked”)@Testpublic void testGetAttriValues() throws NamingException {assertEquals(“anotherbug.com”, JNDIUitl.getAttributeValues(context, “o=anotherbug,c=com”, “dc”).get(0) + “”);List lst = new ArrayList();lst = JNDIUitl.getAttributeValues(context, “o=anotherbug,c=com”, “objectClass”);assertEquals(“organization”, lst.get(1) + “”);for (int i = 0; i < lst.size(); i++) {log.info(lst.get(i));log.info(ReflectionToStringBuilder.toString(lst.get(i)).toString());}}@SuppressWarnings(“unchecked”)@Testpublic void testSearchContext() throws NamingException {List list = JNDIUitl.searchContextSub(context, “o=anotherbug,c=com”, “(objectClass=*)”);for (int i = 0; i < list.size(); i++) {log.info(list.get(i));}}@Afterpublic void destroy() throws NamingException {context.close();}
标签:windows