读书人

Linux 上安装Ldap笔记 JAVA调用Ldap

发布时间: 2012-08-27 21:21:57 作者: rapoo

Linux 下安装Ldap笔记 JAVA调用Ldap

Linux 下安装Ldap笔记
参考地址:http://www.yuanma.org/data/2008/0428/article_3023.htm
1、安装环境版本:
openldap-stable-20100719.tgz(openldap-2.4.23) (http://www.openldap.org)
ldapweb-2.0.zip (Ldap web管理工具,需要先安装Apach服务器,后来再看看....还需要安装mysql的环境,烦,不装了)(http://sourceforge.net/projects/ldapweb)
后来在使用的过程中碰到一工具 LdapSearch 3.0? ,可以用于查询 ,后面介绍

LDAP Browser/Editor v2.8.2? LDAP 编辑工具
2、所需要软件:
BDB, 在安装Ldap的过程中,提示说需要BDB的环境
在openldap-2.4.23\README 文件中也有提及,且对版本也有要求,我下载的是 db-4.6.21.tar.tar
?SLAPD:
??????? BDB and HDB backends require Oracle Berkeley DB 4.4, 4.5,
??????? 4.6, 4.7, or 4.8.? It is highly recommended to apply the
??????? patches from Oracle for a given release.

3、安装Ldap
#tar zxvf openldap-stable-20100719.tgz
#cd openldap-2.4.23
#./configure prefix=/home/local/ldap??????? //指定安装后的目录
#make depend???????????????????????????????? //如果没有BDB的环境,这里会报错,关于BDB的安装见 【4】
#make
#make install

配置:
slapd.conf文件 端口默认为389
suffix????? "o=hitek,c=cn"
rootdn????? "cn=root,o=hitek,c=cn"??? //这个就是后面登录的用户名
rootpw????? 123????????? //这里可以直接写明文,也可以用/home/local/ldap/sbin/slappasswd? 生成密文
directory?/home/local/ldap/var/openldap-data??? //存储数据的目录
编辑可以用于导入的ldif文件
/home/local/ldap/var/openldap-data/base.ldif
dn:o=hitek,c=cn
o:hitek
objectclass:top
objectclass:organization???? //这个好像是指定的

dn:ou=manager,o=hitek,c=cn??? //类似于建个组
ou:manager
objectclass:top
objectclass:organizationalUnit???? //这个好像是指定的

dn:cn=simbe,ou=manager,o=hitek,c=cn?? //一个用户simbe
objectclass:top
objectclass:organizationalRole???? //这个好像是指定的
cn:simbe
4、BDB的安装
?? #tar zxvf db-4.6.21.tar.gz
?? #mkdir /var/apps/db-4.6.21
?? #/.../db-4.6.21/configure
?? #make;make install


#tar -zxf db-4.6.21.tar.tar
#cd db-4.6.21/build_unix/
#../dist/configure --prefix=/usr/local/BerkeleyDB
#make
#make install?

//下面的可以编辑 ~/.bash_profile 加入环境变量
#export CPPFLAGS="-I/usr/local/BerkeleyDB/include"
#export LDFLAGS="-L/usr/local/BerkeleyDB/lib"?? //注:如不设此环境变量,在编译openldap时,会出现以下错误? configure: error: BDB/HDB: BerkeleyDB not available
#export LD_LIBRARY_PATH="/usr/local/BerkeleyDB/lib"?? //configure: error: Berkeley DB version mismatch

5、ldap ?工具介绍
下载地址:http://www.baidu.com/s?wd=LdapSearch+3.0&rsv_bp=0&n=2&inputT=859

Linux 上安装Ldap笔记  JAVA调用Ldap

?

LDAP Browser/Editor v2.8.2

?

Linux 上安装Ldap笔记  JAVA调用Ldap

?

6、常用的一些ldap操作
开启
/home/local/ldap/libexec/slapd
关闭
kill -9
生成密码
/home/local/ldap/sbin/slappasswd
检查 search? ,ldap是否成功
ldapsearch -x -b '' -s base '(objectclass=*)' namingContexts
配置
/home/local/ldap/etc/openldap/slapd.conf
添加节点
ldapadd -x -D "cn=Manager,dc=taitien,dc=com,dc=tw" -W -f BDN.ldif
ldapadd -x -D "cn=root,o=hitek,c=cn" -W -f /home/local/ldap/var/openldap-data/base.ldif

7、JAVA调用Ldap

调用使用JNDI,不需要另外的JAR包

import java.util.Enumeration;import java.util.Hashtable;import javax.naming.Context;import javax.naming.NamingEnumeration;import javax.naming.directory.Attribute;import javax.naming.directory.Attributes;import javax.naming.directory.BasicAttribute;import javax.naming.directory.BasicAttributes;import javax.naming.directory.DirContext;import javax.naming.directory.InitialDirContext;import javax.naming.directory.SearchControls;import javax.naming.directory.SearchResult;public class Ldap{    private Hashtable env = null;    private DirContext ctx = null;    private boolean islogin = false;    StringBuffer url;    String host;    String port;    String userName;    String password;    String baseDN;    public static void main(String[] args)    {        Ldap ldap = new Ldap();        ldap.userLogin();    }    public Ldap()    {        try        {            host = "10.47.159.29";            port = "389";            baseDN = "o=hitek,c=cn";            userName = "cn=root,o=hitek,c=cn";            password = "123";            url = new StringBuffer("LDAP://");            url.append(host).append(":").append(port);            url.append("/").append(baseDN);        } catch (Exception e)        {            e.printStackTrace();            System.out.println("");        }        // pwd="secret";        env = new Hashtable();        env.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");        env.put("java.naming.provider.url", url.toString());        env.put(Context.SECURITY_AUTHENTICATION, "simple");        env.put("java.naming.security.principal", userName);        env.put("java.naming.security.credentials", password);        System.out.println("-------------");    }    public boolean userLogin()    {          Hashtable envi = new Hashtable();        try        {            envi.put("java.naming.factory.initial", "com.sun.jndi.ldap.LdapCtxFactory");            envi.put("java.naming.provider.url", url.toString());            envi.put(Context.SECURITY_AUTHENTICATION, "simple");            envi.put("java.naming.security.principal", userName);            envi.put("java.naming.security.credentials", password);            DirContext ctx = new InitialDirContext(envi);            System.out.println("连接成功");            SearchControls constraints = new SearchControls();            constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);            String attrList[] = { "cn" };            constraints.setReturningAttributes(attrList);            NamingEnumeration results = ctx.search("ou=manager", "cn=abc", constraints); // 第一个值 不能有Base DN的值            while (results.hasMore())            {                SearchResult si = (SearchResult) results.next();                System.out.println(si.getName());                Attributes attrs = si.getAttributes();                if (attrs == null)                {                    System.out.println("   No attributes");                    continue;                }                NamingEnumeration ae = attrs.getAll();                while (ae.hasMoreElements())                {                    Attribute attr = (Attribute) ae.next();                    String id = attr.getID();                    Enumeration vals = attr.getAll();                    while (vals.hasMoreElements())                        System.out.println("   " + id + ": " + vals.nextElement());                }            }            System.out.println(" 查询成功");            // 3.添加节点            String newUserName = "user2";            BasicAttributes attrsbu = new BasicAttributes();            BasicAttribute objclassSet = new BasicAttribute("objectClass");            objclassSet.add("top");            objclassSet.add("organizationalRole");            attrsbu.put(objclassSet);            attrsbu.put("ou", newUserName);            attrsbu.put("cn", newUserName);            ctx.createSubcontext("", attrsbu);            System.out.println("添加节点成功");            return true;        } catch (Exception e)        {            e.printStackTrace();            return false;        } finally        {            try            {                if (ctx != null)                {                    ctx.close();                }            } catch (Exception ie)            {                ie.printStackTrace();            }        }    }}

?

8、LDAP错误码

?

代码?????????????????????????????? 值????? 说明
---------------------------------------
LDAP_SUCCESS????????????????????? 0x00?? 请求成功。
LDAP_OPERATIONS_ERROR???????????? 0x01?? LDAP 库初始化失败。
LDAP_PROTOCOL_ERROR?????????????? 0x02?? 出现协议错误。
LDAP_TIMELIMIT_EXCEEDED?????????? 0x03?? 超出时间限制。
LDAP_SIZELIMIT_EXCEEDED?????????? 0x04?? 超出大小限制。
LDAP_COMPARE_FALSE??????????????? 0x05?? 比较结果为 FALSE。
LDAP_COMPARE_TRUE???????????????? 0x06?? 比较结果为 TRUE。
LDAP_AUTH_METHOD_NOT_SUPPORTED??? 0x07?? 不支持此身份验证方法。
LDAP_STRONG_AUTH_REQUIRED???????? 0x08?? 需要加强的身份验证。
LDAP_REFERRAL_V2????????????????? 0x09?? LDAP 版本 2 检索。
LDAP_PARTIAL_RESULTS????????????? 0x09?? 接收到部分结果和检索。
LDAP_REFERRAL???????????????????? 0x0a?? 出现检索。
LDAP_ADMIN_LIMIT_EXCEEDED???????? 0x0b?? 超出服务器上的管理限制。
LDAP_UNAVAILABLE_CRIT_EXTENSION?? 0x0c?? 没有精密扩展。
LDAP_CONFIDENTIALITY_REQUIRED???? 0x0d?? 需要保密。
LDAP_NO_SUCH_ATTRIBUTE??????????? 0x10?? 请求的属性不存在。
LDAP_UNDEFINED_TYPE?????????????? 0x11?? 类型未定义。?
LDAP_INAPPROPRIATE_MATCHING?????? 0x12?? 出现不适当的匹配。
LDAP_CONSTRAINT_VIOLATION???????? 0x13?? 出现约束冲突。
LDAP_ATTRIBUTE_OR_VALUE_EXISTS??? 0x14?? 属性已存在或已被赋值。
LDAP_INVALID_SYNTAX?????????????? 0x15?? 语法无效。
LDAP_NO_SUCH_OBJECT?????????????? 0x20?? 对象不存在。
LDAP_ALIAS_PROBLEM??????????????? 0x21?? 别名无效。
LDAP_INVALID_DN_SYNTAX??????????? 0x22?? 辨别名的语法无效。
LDAP_IS_LEAF????????????????????? 0x23?? 该对象为叶对象。
LDAP_ALIAS_DEREF_PROBLEM????????? 0x24?? 无法取消对别名的引用。
LDAP_INAPPROPRIATE_AUTH?????????? 0x30?? 身份验证不正确。
LDAP_INVALID_CREDENTIALS????????? 0x31?? 提供的凭据无效。
LDAP_INSUFFICIENT_RIGHTS????????? 0x32?? 用户无足够的访问权限。
LDAP_BUSY???????????????????????? 0x33?? 服务器忙。
LDAP_UNAVAILABLE????????????????? 0x34?? 服务器不可用。
LDAP_UNWILLING_TO_PERFORM???????? 0x35?? 服务器不处理目录请求。
LDAP_LOOP_DETECT????????????????? 0x36?? 引用链循环回至引用服务器。
LDAP_NAMING_VIOLATION???????????? 0x40?? 存在命名冲突。
LDAP_OBJECT_CLASS_VIOLATION?????? 0x41?? 存在对象类别冲突。
LDAP_NOT_ALLOWED_ON_NONLEAF?????? 0x42?? 不允许在非叶对象上操作。
LDAP_NOT_ALLOWED_ON_RDN?????????? 0x43?? 不允许在 RDN 上操作。
LDAP_ALREADY_EXISTS?????????????? 0x44?? 对象已存在。
LDAP_NO_OBJECT_CLASS_MODS???????? 0x45?? 无法修改对象类别。
LDAP_RESULTS_TOO_LARGE??????????? 0x46?? 返回的结果太大。
LDAP_AFFECTS_MULTIPLE_DSAS??????? 0x47?? 多个目录服务代理受到影响。
LDAP_OTHER??????????????????????? 0x50?? 出现未知错误。
LDAP_SERVER_DOWN????????????????? 0x51?? 无法联系 LDAP 服务器。
LDAP_LOCAL_ERROR????????????????? 0x52?? 出现本地错误。
LDAP_ENCODING_ERROR?????????????? 0x53?? 出现编码错误。
LDAP_DECODING_ERROR?????????????? 0x54?? 出现解码错误。
LDAP_TIMEOUT????????????????????? 0x55?? 搜索超时。
LDAP_AUTH_UNKNOWN???????????????? 0x56?? 出现未知的身份验证错误。
LDAP_FILTER_ERROR???????????????? 0x57?? 搜索筛选器不正确。
LDAP_USER_CANCELLED?????????????? 0x58?? 用户已取消操作。
LDAP_PARAM_ERROR????????????????? 0x59?? 传递给例程的参数不正确。
LDAP_NO_MEMORY??????????????????? 0x5a?? 系统内存不足。
LDAP_CONNECT_ERROR??????????????? 0x5b?? 无法建立到服务器的连接。
LDAP_NOT_SUPPORTED??????????????? 0x5c?? 不支持此功能。
LDAP_CONTROL_NOT_FOUND??????????? 0x5d?? ldap 函数找不到指定控件。
LDAP_NO_RESULTS_RETURNED????????? 0x5e?? 不支持此功能。
LDAP_MORE_RESULTS_TO_RETURN?????? 0x5f?? 将返回其他结果。
LDAP_CLIENT_LOOP????????????????? 0x60?? 检测到客户循环。
LDAP_REFERRAL_LIMIT_EXCEEDED????? 0x61?? 超出检索限制。
LDAP_SASL_BIND_IN_PROGRESS??????? 0x0E?? 多阶段绑定的中间绑定结果

?

读书人网 >UNIXLINUX

热点推荐