`
bdk82924
  • 浏览: 563372 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

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

 

LDAP Browser/Editor v2.8.2

 

 

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   多阶段绑定的中间绑定结果

 

  • 大小: 406.2 KB
  • 大小: 15.6 KB
分享到:
评论

相关推荐

    [原创]学习LDAP笔记

    自己学习LDAP的笔记记录,包括有LDAP的简单介绍,在windows下的安装部署及api介绍,Linux下的编译安装及在KDevelop下的api调用。还有对一个可视化管理工具phpLDAPadmin的介绍

    LDAP学习笔记相关资料

    配置完成后,你可以使用ldapsearch等工具进行查询,以验证配置是否正确,并开始利用LDAP来管理用户、组和其他目录信息。在实际应用中,LDAP常用于身份验证、授权和目录服务,如用户账户管理、邮件系统、网络设备配置...

    DzzOffice AD/LDAP账户认证

    对于首次安装的用户,请在应用市场右下角选择“导入”功能,然后选择要导入的文件,即文件夹下的“dzz_app_LDAP.xml”。选择文件后点击“提交”按钮完成安装。 请严格按照上述步骤操作,以确保插件能够正确安装和...

    CAS整合LDAP实现单点登录学习笔记.doc

    4. **配置CAS Server**:配置CAS Server以使用LDAP作为认证源,这通常涉及修改`deployerConfigContext.xml`文件,设置LDAP连接池、用户搜索过滤器和属性映射。 5. **配置CAS Client**:在各个应用服务中,更新或配置...

    LDAPExporter:适用于 Windows 和 Linux 的快速 LDAP 数据导出器-开源

    Windows 64 位编译为 Linux 64 位导出到 LDIF 导出到 XLS 导出到 CSV 支持LDAPS 支持多值属性保存和加载配置文件自动恢复以前使用的会话“便笺”功能允许使用配置文件保存笔记模式支持属性完成以协助大型模式安装#...

    CAS整合LDAP实现单点登录学习笔记.pdf

    整合CAS和LDAP可以实现统一的用户管理,使得用户在登录到使用CAS的应用程序时,其身份验证将通过LDAP来进行。 ##### 4.2 LDAP安装 安装LDAP服务器通常包括以下步骤: 1. **选择合适的LDAP服务器软件**:如OpenLDAP...

    zeppelin集成ldap

    以上步骤详细介绍了如何在Zeppelin中集成LDAP的过程,包括安装配置OpenLDAP服务、配置客户端工具以及配置Zeppelin以使用LDAP进行认证和授权。这一过程不仅可以提高系统的安全性,还能够简化用户管理流程。

    JAVA WEB学习笔记

    【JAVA WEB学习笔记】——Tomcat中数据源的配置与使用 在Java Web开发中,数据源(DataSource)是管理数据库连接的关键组件。它提供了一种高效、灵活的方式来获取和管理数据库连接,尤其是在大型企业级应用中。...

    DzzOffice 小胡版 AD与LDAP账户认证插件

    对于首次安装的用户,请在应用市场右下角选择“导入”功能,然后选择要导入的文件,即文件夹下的“dzz_app_LDAP.xml”。选择文件后点击“提交”按钮完成安装。 请严格按照上述步骤操作,以确保插件能够正确安装和...

    Linux 5.4 RHCE NIS学习笔记

    本篇笔记将围绕如何在Red Hat Enterprise Linux 5.4 (RHEL 5.4) 环境下搭建和配置NIS服务展开。具体目标包括: 1. **搭建单域单NIS服务器** - 在单台服务器上配置NIS服务,使之能够为客户端提供统一的身份验证和...

    Linux 企业应用案例

    《Linux企业应用案例》一书通过丰富的实战案例,不仅深入浅出地介绍了Linux环境下企业级应用的关键技术点,还提供了大量的实践指导,对于希望深入了解并掌握这些技能的读者来说,是非常宝贵的参考资料。无论是对...

    Jmeter 介绍和安装笔记

    JMeter 完全由 Java 编写,因此在安装前需要确保计算机上已安装了 JDK 且版本在1.8或以上。JMeter 支持多种操作系统,包括 Windows 和 Linux,能够处理多种协议,如 HTTP、HTTPS、GET、POST、PUT 等,适合进行接口...

    Linux学习笔记

    4. 使用LDAP用户登录。 #### 六、权限管理 Linux中的文件权限通过`ls -l`命令查看,例如: ``` -rw-r--r--. 1 root root 17 Nov 16 04:44 test ``` - `-rw-r--r--`表示文件权限,前一个`-`表示这是一个文件而非...

    Linux上构建一个RADIUS服务器详解

    - **配置用户认证策略**:在RADIUS服务器上配置使用LDAP作为验证后端的相关策略。 #### 六、实际应用场景 想象一下这样的场景: - 用户在家里通过拨号验证访问公司内网。 - 带有无线支持的笔记本电脑通过无线验证...

    Jenkins笔记笔记笔记

    - **安装**:Jenkins可以通过下载war文件运行在Java环境上,或者在Linux、Windows、macOS等操作系统上通过包管理器安装。 - **配置**:初始化时,Jenkins会引导用户设置管理员密码,并推荐安装一些常用插件。之后...

    目前流行的四种Linux产品.pdf

    Red Hat Linux 6.1的核心特性之一是其隐形安装实用程序,使得安装过程变得更加简单。此外,它还增强了对SMP(对称多处理)的支持,提升了软件和硬件RAID的性能,适合作为服务器使用。6.1版本还集成了LDAP支持,改进...

    aix学习笔记及使用经验

    本文将深入探讨在AIX学习笔记中提到的一些关键知识点,包括AIX的安装、AIX5.2中基于LDAP的用户管理、AIX微码升级以及AIX中的镜像操作。 首先,让我们来看看AIX的安装过程。AIX的安装通常通过System Director或Open...

Global site tag (gtag.js) - Google Analytics