由于工作需要,我这几天学习了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 - 用户必须重设密码
分享到:
相关推荐
通过JNDI,开发者可以使用统一的API来查找、操作和管理这些服务。`com.sun.jndi.ldap.jar`中的实现使得Java应用能够利用LDAP服务进行身份验证、数据检索和其他操作。 在描述中提到的“maven稀缺jar资源”,这可能...
基于Java JNDI 操纵LDAP的基础实现,包括LDAP连接相关生命周期,认证的两种策略demo,条目的操作,schema的基础操作包括(attributeDefinition\objectDefinition\)但未包含相关syntaxDefinition的操纵. 没有资源分的朋友...
在描述中提到的链接,虽然没有提供具体内容,但通常这类博客会详细介绍如何使用JNDI来连接和操作LDAP目录。常见的步骤可能包括: 1. **配置JNDI环境**:在Java应用中,需要设置JNDI的初始上下文(Initial Context)...
使用JNDI操作LDAP,首先需要创建一个初始上下文(Initial Context),这是访问 LDAP 服务器的入口点。然后,通过这个上下文执行各种操作,如查找(lookup)、绑定(bind)、重新绑定(rebind)、删除(unbind)和...
import com.sun.jndi.ldap.ctl.VirtualListViewControl;
在IT行业中,JNDI(Java Naming and Directory Interface...总之,通过封装 JNDI 和 LDAP 操作,我们可以创建易于使用、健壮且高效的工具,帮助开发者更便捷地与 LDAP 服务器进行通信,从而提升应用程序的功能和性能。
在Java开发中,直接使用JNDI API操作LDAP可能会涉及很多底层细节,包括连接设置、安全配置等,这增加了代码的复杂性和出错的可能性。因此,为了简化这一过程,通常会创建一个工具类来封装这些操作,使得开发者可以更...
在本文中,我们将通过一个具体的示例来深入理解如何使用JNDI进行LDAP(Lightweight Directory Access Protocol)操作。 #### 二、JNDI与LDAP结合应用 LDAP是一种基于X.500标准的协议,用于构建和维护目录信息。在...
本案例将介绍如何使用Java编程语言操作LDAP服务器,实现用户登录验证等功能。 首先,我们需要了解Java中的JNDI(Java Naming and Directory Interface)框架,它是Java提供的一套标准API,用于与各种命名和目录服务...
提供了使用fsContext服务器的unbind bind list lookup rename的相关例子,及ldap 连接的一个例子 jndi,就是命名服务(n:naming)和目录服务(d:directory). 命名服务:把对象映射到方便记忆的名字的机制.可以通过域名系统...
在开始使用JNDI与LDAP集成之前,通常需要搭建一个LDAP服务器环境,以便进行实际的测试和开发。文档中提到的LDAP服务器实现是基于`com.unboundid.ldap`包进行构建的。该服务器是基于内存的实现,即LDAP服务器中的数据...
综上所述,"用sql语句的方式操作ldap"涉及到理解 LDAP 的特性和结构,以及如何使用JNDI API在Java应用程序中执行这些操作。通过这样的方式,开发者可以利用熟悉的SQL概念来管理LDAP目录,从而简化开发流程。
本实例将深入讲解如何利用JNDI进行数据库操作,以及数据源在数据库操作中的角色。 首先,JNDI的主要作用是为应用程序提供了一个统一的接口,用于查找和绑定资源。这些资源可以是数据库连接、邮件服务器、对象工厂等...
在 Java 中,开发者可以使用 JNDI 的 LDAP 实现来连接 LDAP 服务器,并执行各种操作。JNDI 提供了一个统一的接口来访问不同的目录服务,包括 LDAP、DNS、NIS 等。通过 JNDI,开发者可以使用 Java 语言来访问和操作 ...
本文将通过一个入门级的例子,详细介绍如何利用Spring LDAP和JNDI进行增删改查操作。 ### Spring LDAP简介 Spring LDAP是Spring框架的一个扩展,它为LDAP(Lightweight Directory Access Protocol)提供了一个面向...
通过上述介绍,我们了解到在Windows XP环境下安装和配置OpenLDAP的基本步骤,包括如何创建初始化数据、启动和测试LDAP服务器,以及如何使用JNDI API来编写Java程序访问LDAP服务器。这些知识点对于初学者来说非常实用...