`
xfbbsnet
  • 浏览: 93359 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

使用JNDI操作LDAP(1)(转载)

阅读更多
由于工作需要,我这几天学习了Java JNDI操作AD,也分享一些心得。
       其实JNDI可以分为命名操作和目录操作,我要学习的是后者,目录操作。

       其实学过之后感觉操作LDAP比操作数据库要简单多了,首先写一个连接LDAP的类吧:

package operstation;


import java.util.Hashtable;

import javax.naming.Context;

import javax.naming.NamingException;

import javax.naming.ldap.InitialLdapContext;

import javax.naming.ldap.LdapContext;


/**

* This is a tool class for connecting to ldap.

* @author Jason

*/

public class ConnLDAP {

    //store the connected information

    private Hashtable env = null;

    //ldap context

    private LdapContext ctx = null;

    //set some connected information

    private String INITIAL_CONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";

    private String PROVIDER_URL = "ldap://localhost:389";

    private String SECURITY_AUTHENTICATION = "simple";

    private String SECURITY_PRINCIPAL = "Administrator@jason.com";

//或者是cn=Administrator,cn=Users,dc=www,dc=jason,dc=com",总之是你的用户所在的dn

    private String SECURITY_CREDENTIALS = "abc_8888";

    

    /** Creates a new instance of ConnLDAP */

    public ConnLDAP() {

        env = new Hashtable();

    }

    

    /**

     * Connect to ldap and initialize the ldap context.

     * @throws javax.naming.NamingException If connect fail,throw this exception.

     */

    public void connectLdap()throws NamingException{

        //set the initializing information of the context

        env.put(Context.INITIAL_CONTEXT_FACTORY, INITIAL_CONTEXT_FACTORY);

        //set the URL of ldap server

        env.put(Context.PROVIDER_URL, PROVIDER_URL);

        //set the authentication mode

        env.put(Context.SECURITY_AUTHENTICATION, SECURITY_AUTHENTICATION);

        //set user of AD

        env.put(Context.SECURITY_PRINCIPAL, SECURITY_PRINCIPAL);

        //set password of user

        env.put(Context.SECURITY_CREDENTIALS, SECURITY_CREDENTIALS);

        //initialize the ldap context

        ctx = new InitialLdapContext(env,null);

    }

    

    /**

     * Close the ldap context.

     * @throws javax.naming.NamingException If close ldap context,throw this exception.

     */

    public void closeContext() throws NamingException{

        ctx.close();

    }

    

    /**

     * Return the ldap context.

     * @return Return the ldap context.

     */

    public LdapContext getContext(){

        return this.ctx;

    }

}

这个类很好懂,连接LDAP需要一个哈希表来保存连接的相关信息,学过JDBC的很快就可以上手。

l         INITIAL_CONTEXT_FACTORY需要提供一个字符串,我们用sun的JNDI就用此字符串吧:com.sun.jndi.ldap.LdapCtxFactory

l         PROVIDER_URL是连接的URL,协议要用ldap。端口要用389,这个是专门给ldap使用的端口,如果使用了SSL的话就要用636。

l         SECURITY_AUTHENTICATION我们使用simple模式

l         SECURITY_PRINCIPAL是用户名,用以下格式:用户名@域名

l         SECURITY_CREDENTIALS是连接LDAP的密码

写好哈希表之后就可以新建一个context了。注意,这个context一般使用DirContext或者LdapContext,其中LdapContext继承DirContext。

用一下语句获得LdapContext句柄:

ctx = new InitialLdapContext(env,null);

之后通过这个句柄,我们可以很轻松地实现LDAP的操作,例如增删查改。

最后用完记得调用close方法释放连接。


另外,一般连接出现的常见错误如下:

LDAP: error code 49 - 80090308: LdapErr: DSID-0C090334, comment: AcceptSecurityContext error, data 52e, vece
其中红字部分的意思如下:
525 - 用户没有找到
52e - 证书不正确
530 - not permitted to logon at this time
532 - 密码期满
533 - 帐户不可用
701 - 账户期满
773 - 用户必须重设密码

分享到:
评论

相关推荐

    com.sun.jndi.ldap.jar

    通过JNDI,开发者可以使用统一的API来查找、操作和管理这些服务。`com.sun.jndi.ldap.jar`中的实现使得Java应用能够利用LDAP服务进行身份验证、数据检索和其他操作。 在描述中提到的“maven稀缺jar资源”,这可能...

    基于JavaJNDI的LDAP Demo

    基于Java JNDI 操纵LDAP的基础实现,包括LDAP连接相关生命周期,认证的两种策略demo,条目的操作,schema的基础操作包括(attributeDefinition\objectDefinition\)但未包含相关syntaxDefinition的操纵. 没有资源分的朋友...

    JNDI访问LDAP

    在描述中提到的链接,虽然没有提供具体内容,但通常这类博客会详细介绍如何使用JNDI来连接和操作LDAP目录。常见的步骤可能包括: 1. **配置JNDI环境**:在Java应用中,需要设置JNDI的初始上下文(Initial Context)...

    jndi.zip_java ldap_jndi_jndi ldap_ldap_ldap java

    使用JNDI操作LDAP,首先需要创建一个初始上下文(Initial Context),这是访问 LDAP 服务器的入口点。然后,通过这个上下文执行各种操作,如查找(lookup)、绑定(bind)、重新绑定(rebind)、删除(unbind)和...

    import com.sun.jndi.ldap.ctl.VirtualListViewControl;

    import com.sun.jndi.ldap.ctl.VirtualListViewControl;

    封装JNDI的LDAP服务器的工具类

    在IT行业中,JNDI(Java Naming and Directory Interface...总之,通过封装 JNDI 和 LDAP 操作,我们可以创建易于使用、健壮且高效的工具,帮助开发者更便捷地与 LDAP 服务器进行通信,从而提升应用程序的功能和性能。

    封装jndi操作ldap服务器的工具类

    在Java开发中,直接使用JNDI API操作LDAP可能会涉及很多底层细节,包括连接设置、安全配置等,这增加了代码的复杂性和出错的可能性。因此,为了简化这一过程,通常会创建一个工具类来封装这些操作,使得开发者可以更...

    JNDI Java操作示例

    在本文中,我们将通过一个具体的示例来深入理解如何使用JNDI进行LDAP(Lightweight Directory Access Protocol)操作。 #### 二、JNDI与LDAP结合应用 LDAP是一种基于X.500标准的协议,用于构建和维护目录信息。在...

    使用Java操作LDAP案例

    本案例将介绍如何使用Java编程语言操作LDAP服务器,实现用户登录验证等功能。 首先,我们需要了解Java中的JNDI(Java Naming and Directory Interface)框架,它是Java提供的一套标准API,用于与各种命名和目录服务...

    jndi之fsContext ldap

    提供了使用fsContext服务器的unbind bind list lookup rename的相关例子,及ldap 连接的一个例子 jndi,就是命名服务(n:naming)和目录服务(d:directory). 命名服务:把对象映射到方便记忆的名字的机制.可以通过域名系统...

    027-JNDI之初探 LDAP.pdf

    在开始使用JNDI与LDAP集成之前,通常需要搭建一个LDAP服务器环境,以便进行实际的测试和开发。文档中提到的LDAP服务器实现是基于`com.unboundid.ldap`包进行构建的。该服务器是基于内存的实现,即LDAP服务器中的数据...

    用sql语句的方式操作ldap

    综上所述,"用sql语句的方式操作ldap"涉及到理解 LDAP 的特性和结构,以及如何使用JNDI API在Java应用程序中执行这些操作。通过这样的方式,开发者可以利用熟悉的SQL概念来管理LDAP目录,从而简化开发流程。

    用jndi操作数据库小实例

    本实例将深入讲解如何利用JNDI进行数据库操作,以及数据源在数据库操作中的角色。 首先,JNDI的主要作用是为应用程序提供了一个统一的接口,用于查找和绑定资源。这些资源可以是数据库连接、邮件服务器、对象工厂等...

    java对LDAP的增删改查

    在 Java 中,开发者可以使用 JNDI 的 LDAP 实现来连接 LDAP 服务器,并执行各种操作。JNDI 提供了一个统一的接口来访问不同的目录服务,包括 LDAP、DNS、NIS 等。通过 JNDI,开发者可以使用 Java 语言来访问和操作 ...

    SpringLDAP和JNDI的增删改查

    本文将通过一个入门级的例子,详细介绍如何利用Spring LDAP和JNDI进行增删改查操作。 ### Spring LDAP简介 Spring LDAP是Spring框架的一个扩展,它为LDAP(Lightweight Directory Access Protocol)提供了一个面向...

    初学ldap和jndi

    通过上述介绍,我们了解到在Windows XP环境下安装和配置OpenLDAP的基本步骤,包括如何创建初始化数据、启动和测试LDAP服务器,以及如何使用JNDI API来编写Java程序访问LDAP服务器。这些知识点对于初学者来说非常实用...

Global site tag (gtag.js) - Google Analytics