由于客户的需求,在没有高质量教程的情况下,费劲了1周,终于从linux安装一直到用java增删改查完成,赶紧写个csdn把错误和过程记录下来!
环境,linuxOS6.5,
安装好虚拟机,根本不bb直接来干货
安装之前查一下
1 | find / -name openldap* |
centos6.5默认安装了LDAP,但没有装ldap-server和ldap-client |
于是yum安装
1 |
su root |
2 |
yum install -y openldap openldap-servers openldap-clients |
安装以后进行配置
1 |
cp /usr/share/openldap-servers/slapd.conf.obsolete /etc/openldap/slapd.conf |
2 |
cp /usr/share/openldap-servers/DB_CONFIG.example /var/lib/ldap/DB_CONFIG |
3 |
mv /etc/openldap/slapd.d{,.bak} |
然后通过vi修改slapd.conf,步骤如下:
1. 设置目录树的后缀
找到语句:
suffix "dc=my-domain,dc=com"
将其改为:
suffix "dc=etiantian,dc=org"
然后通过vi修改slapd.conf,步骤如下:
2.该语句设置LDAP管理员的DN
找到语句:
rootdn "cn=Manager,dc=my-domain,dc=com"
将其改为:
rootdn "cn=admin,dc=etiantian,dc=org"
3.设置LDAP管理员的口令
找到语句:
rootpw secret
将其改为:
rootpw root
口令直接用明文就可以 注意格式,人家只改英文字母,人家的逗号不要动!!!
每次更改配置文件都要执行下面4行,机制问题,就这个问题,卡了我2天
rm -fr /etc/openldap/slapd.d/*
slaptest -f /etc/openldap/slapd.conf -F /etc/openldap/slapd.d
chown -R ldap:ldap /etc/openldap/slapd.d/
service slapd restart
这时你的ldap服务器已经装好了,但是还不能用,好了, 继续装客户端,有两个客户端,一个是web版的,一个是客户端版的,我们都说一下,先说web版的吧,因为这TM的是中文的,真好用,哈哈哈
首先去安装服务环境
yum install httpd php php-ldap php-gd -y
下载一个 ldap-account-manager-3.7.tar.gz 因为3.7的我用的没问题,所以就一直用,现在的版本有6.多了
把压缩包放在 cd /var/www/html/ 这个目录下,解压缩
tar zxf ldap-account-manager-3.7.tar.gz
备份两个文件
cp config.cfg_sample config.cfg
cp lam.conf lam.conf
更改里面的配置文件。代码如下
sed -i 's#cn=Manager#cn=admin#g' lam.conf
sed -i 's#dc=my-domin#dc=etiantian#g' lam.conf
sed -i 's#dc=com#dc=org#g' lam.conf
设置权限
chown -R apache.apache /var/www/html/ldap
启动命令
/etc/init.d/httpd restart
这个时候一定要注意,我们应该可以访问web客户端了,但是!!!!!!千万把防护墙关了!!!!!!
关闭防火墙的方法为:
1. 永久性生效
开启:chkconfig iptables on
关闭:chkconfig iptables off
2. 即时生效,重启后失效
开启:service iptables start
关闭:service iptables stop
OK,直接ip地址访问,192.168.x.x/ldap看到这个恭喜你,成功一半,然后我们配置一下
回到登录页面,选中文,密码是root,进去一目了然,操作很简单
先去建个组,再去创建用户,到这web就完成了,
如果你不想用这个,还有一个英文的客户端:Softerra Ldap Administrator 下载下来,
其他的全部下一步,连接上就可以看到自己的服务器的资源了,你如果在web端添加数据,这边是可以时时更新的
全英文,怎么操作大家自己摸索吧,连接上的图是这样,里面我添加了两个用户信息
重点来了,怎么用java连接ldap去进行怎么增删改查!!!!!!!!!!!!!!!不BB,直接整套代码,需要改的地方我标记!!!
<dependency> <groupId>com.unboundidgroupId> <artifactId>unboundid-ldapsdkartifactId> <version>3.2.0version> <scope>testscope> dependency>
package com.baomidou.kisso.ldap; import com.unboundid.ldap.sdk.*; import com.unboundid.ldap.sdk.controls.SubentriesRequestControl; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; public class add { // 当前配置信息 private static String ldapHost = "192.168.0.112";//改成自己的 private static int ldapPort = 389; private static String ldapBindDN = "cn=admin,dc=etiantian,dc=org";//和我配置一样的不需要改 private static String ldapPassword = "root"; private static LDAPConnection connection = null; /** 连接LDAP */ public static void openConnection() { if (connection == null) { try { connection = new LDAPConnection(ldapHost, ldapPort, ldapBindDN, ldapPassword); } catch (Exception e) { System.out.println("连接LDAP出现错误:\n" + e.getMessage()); } } } /** 创建DC */ public static void createDC(String baseDN, String dc) { String entryDN = "dc=" + dc + "," + baseDN; try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(entryDN); if (entry == null) { // 不存在则创建 ArrayListattributes = new ArrayList (); attributes.add(new Attribute("objectClass", "top", "organization", "dcObject")); attributes.add(new Attribute("dc", dc)); attributes.add(new Attribute("o", dc)); connection.add(entryDN, attributes); System.out.println("创建DC" + entryDN + "成功!"); } else { System.out.println("DC " + entryDN + "已存在!"); } } catch (Exception e) { System.out.println("创建DC出现错误:\n" + e.getMessage()); } } /** 创建组织 */ public static void createO(String baseDN, String o) { String entryDN = "o=" + o + "," + baseDN; try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(entryDN); if (entry == null) { // 不存在则创建 ArrayList attributes = new ArrayList (); attributes.add(new Attribute("objectClass", "top", "organization")); attributes.add(new Attribute("o", o)); connection.add(entryDN, attributes); System.out.println("创建组织" + entryDN + "成功!"); } else { System.out.println("组织" + entryDN + "已存在!"); } } catch (Exception e) { System.out.println("创建组织出现错误:\n" + e.getMessage()); } } /** 创建组织单元 */ public static void createOU(String baseDN, String ou) { String entryDN = "ou=" + ou + "," + baseDN; try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(entryDN); if (entry == null) { // 不存在则创建 ArrayList attributes = new ArrayList (); attributes.add(new Attribute("objectClass", "top", "organizationalUnit")); attributes.add(new Attribute("ou", ou)); connection.add(entryDN, attributes); System.out.println("创建组织单元" + entryDN + "成功!"); } else { System.out.println("组织单元" + entryDN + "已存在!"); } } catch (Exception e) { System.out.println("创建组织单元出现错误:\n" + e.getMessage()); } } /** 创建用户 */ public static void createEntry(String baseDN, String uid) { String entryDN = "uid=" + uid + "," + baseDN; try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(entryDN); if (entry == null) { // 不存在则创建 ArrayList attributes = new ArrayList (); attributes.add(new Attribute("objectClass", "top", "account")); attributes.add(new Attribute("uid", uid)); connection.add(entryDN, attributes); System.out.println("创建用户" + entryDN + "成功!"); } else { System.out.println("用户" + entryDN + "已存在!"); } } catch (Exception e) { System.out.println("创建用户出现错误:\n" + e.getMessage()); } } /** 修改用户信息 */ public static void modifyEntry(String requestDN, Map data) { try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(requestDN); if (entry == null) { System.out.println(requestDN + " user:" + requestDN + " 不存在"); return; } // 修改信息 ArrayList md = new ArrayList (); for(String key : data.keySet()) { md.add(new Modification(ModificationType.REPLACE, key, data.get(key))); } connection.modify(requestDN, md); System.out.println("修改用户信息成!"); } catch (Exception e) { System.out.println("修改用户信息出现错误:\n" + e.getMessage()); } } /** 删除用户信息 */ public static void deleteEntry(String requestDN) { try { // 连接LDAP openConnection(); SearchResultEntry entry = connection.getEntry(requestDN); if (entry == null) { System.out.println(requestDN + " user:" + requestDN + "不存在"); return; } // 删除 connection.delete(requestDN); System.out.println("删除用户信息成!"); } catch (Exception e) { System.out.println("删除用户信息出现错误:\n" + e.getMessage()); } } /** 查询 */ public static void queryLdap(String searchDN, String filter) { try { // 连接LDAP openConnection(); // 查询企业所有用户 SearchRequest searchRequest = new SearchRequest(searchDN, SearchScope.SUB, "(" + filter + ")"); searchRequest.addControl(new SubentriesRequestControl()); SearchResult searchResult = connection.search(searchRequest); System.out.println(">>>共查询到" + searchResult.getSearchEntries().size() + "条记录"); int index = 1; for (SearchResultEntry entry : searchResult.getSearchEntries()) { System.out.println((index++) + "\t" + entry.getDN()); } } catch (Exception e) { System.out.println("查询错误,错误信息如下:\n" + e.getMessage()); } } public static void main(String[] args) { String root = "org"; String dc = "etiantian"; String o = "kedacom"; String ou = "people"; String uid = "admin"; String filter = "objectClass=account"; createDC("dc=" + root, dc); createO("dc=" + dc + ",dc=" + root, o); createOU("o=" + o + ",dc=" + dc + ",dc=" + root, ou); createEntry("ou=" + ou + ",o=" + o + ",dc=" + dc + ",dc=" + root, uid); queryLdap("ou=" + ou + ",o=" + o + ",dc=" + dc + ",dc=" + root, filter); HashMap data = new HashMap (0); data.put("userid", uid); modifyEntry("uid="+uid+",ou="+ou+",o="+o+",dc="+dc+",dc="+root, data); deleteEntry("uid="+uid+",ou="+ou + ",o="+o+",dc=" + dc + ",dc=" + root); queryLdap("ou=" + ou + ",o=" + o + ",dc=" + dc + ",dc=" + root, filter); } }
到此从安装一直到java操作增删改,全部完成,如果有问题请留言
介绍objectClass的一篇文章, http://blog.csdn.net/qq_27376871/article/details/52037317
ldap数据迁移 http://www.361way.com/openldap-bak-imp-move/2366.html