ldap安装部署_用java增删改查,大型纪录片

由于客户的需求,在没有高质量教程的情况下,费劲了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

ldap安装部署_用java增删改查,大型纪录片_第1张图片

看到这个恭喜你,成功一半,然后我们配置一下


密码默认是lam

ldap安装部署_用java增删改查,大型纪录片_第2张图片其实并没有卵用,改个密码点OK

回到登录页面,选中文,密码是root,进去一目了然,操作很简单

ldap安装部署_用java增删改查,大型纪录片_第3张图片

先去建个组,再去创建用户,到这web就完成了,

如果你不想用这个,还有一个英文的客户端:Softerra Ldap Administrator 下载下来,

ldap安装部署_用java增删改查,大型纪录片_第4张图片

ldap安装部署_用java增删改查,大型纪录片_第5张图片

创建连接,ldap安装部署_用java增删改查,大型纪录片_第6张图片

其他的全部下一步,连接上就可以看到自己的服务器的资源了,你如果在web端添加数据,这边是可以时时更新的

全英文,怎么操作大家自己摸索吧,连接上的图是这样,里面我添加了两个用户信息ldap安装部署_用java增删改查,大型纪录片_第7张图片

重点来了,怎么用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) {
                // 不存在则创建
                ArrayList attributes = 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











你可能感兴趣的:(linux)