JNDI(Java Naming and Directory Interface,Java命名和目录接口)是为了Java程序访问命名服务和目录服务而提供的统一API。
命名服务,说白了就是提供一个名称键值对的管理,即Key-Value对,Key代表一个资源的名称,Value代表资源的真实地址,命名服务允许大家通过唯一的名称找到对应的对象或资源。这样程序只需要知道某种资源的名称,就可以通过JNDI来访问到它,而不需要知道这个资源真实的物理地址。这有点类似于DNS服务,DNS服务将域名解析成IP地址,这样大家只需要在浏览器中输入网站的唯一名称(即域名)就可以访问到该网站,而不需要记住这个网站真实的IP地址。
目录服务,提供的也是一种公共资源的管理服务。目录服务是一种特殊类型的数据库,它按照一定的数据结构,比如树型结构,把各种公共资源组织并保存起来。这种特殊数据库与传统关系型数据库的区别在于,它对查询作了优化,其数据结构允许大家非常快速的找到想要的资源,即保障了一种快速查找能力,不过这种设计也牺牲了其他方面的效率,比如它的更新效率就要低得多。
目录服务中管理的也是名称键值对,不过其键值是具有层次结构的,像一棵树,即通过一个名称或一个带层次结构的名称,你可以定位到一颗子树,而不只是一个属性。由此可见,目录服务将命名服务的概念进一步引申为提供具有层次结构的信息库。一个目录服务通常拥有一个命名服务,但是一个命名服务不必具有一个目录服务。
目前,有许多不同厂商提供目录服务产品如NIS、NDS、Active Directory、或者完全的LDAP目录服务,类似于不同数据库厂商的数据库产品,这些目录服务产品的实现是不一样的,各有各的特点。但他们的前端访问都支持LDAP协议。
LDAP(lightweight directory access protocol,轻量级目录访问协议)是在20世纪90年代早期作为标准目录协议进行开发的。它是目前最流行的目录协议,与厂商、具体平台无关。LDAP用统一的方式定义了如何访问目录服务中的内容,比如增加、修改、删除一个条目。每个具体的目录服务厂商都会向外界提供LDAP协议访问本产品的接口,这样,我们只需要统一关心如何使用LDAP协议就可以了。
JNDI则是Java中用于访问LDAP的API,开发人员使用JNDI完成与LDAP服务器之间的通信,即用JNDI来访问LDAP,而不需要和具体的目录服务产品特性打交道。这样通过LDAP、JNDI两层抽象,使Java程序对目录服务的访问做到了平台无关性。
JNDI API是J2SE中的标准API,是通用的API。JNDI中包括5个包:javax.naming,javax.naming.directory,javax.naming.event,javax.naming.ldap,javax.naming.spi。
常用的JNDI操作有:bind,unbind,lookup,rename,NamingEnumeration listBindings,NamingEnumeration list。
使用JNDI来访问命名服务或目录服务,操作步骤如下:
1、建立一个HashTable,包含定义所希望使用的JNDI服务的属性,所希望连接的LDAP服务器IP地址以及端口;
2、将与认证成用户登录有关的任何信息添加到散列表中;
3、创建初始context对象。如果访问命名服务,则使用InitialContext类,如果访问目录服务,则要使用InitialDirContext类;
4、使用刚才得到的context对象执行所需的操作,如添加新的条目或者搜索条目;
5、完成操作后关闭context对象。
以上是对今天学习JNDI和LDAP的一个初步总结,有些内容取自《精通J2EE网络编程》一书,作者 邓子云、肖峰、谢英辉。记录这些供自己以后工作中查阅。
分享到:
相关推荐
JNDI是一个接口,提供了一种标准的方式来访问命名和目录服务,而LDAP则是一种网络协议,常用于存储和查询用户账户、组信息、配置数据等结构化信息。 JNDI的主要作用是将Java应用程序与各种不同的命名和目录服务连接...
**JNDI(Java Naming and Directory ...通过学习和实践这些内容,开发者可以更好地理解和应用JNDI与LDAP,以实现更高效的企业级服务管理。同时,掌握配置和管理OpenLDAP服务器也是提升系统管理员技能的重要一环。
基于Java JNDI 操纵LDAP的基础实现,包括LDAP连接相关生命周期,认证的两种策略demo,条目的操作,schema的基础操作包括(attributeDefinition\objectDefinition\)但未包含相关syntaxDefinition的操纵. 没有资源分的朋友...
总结来说,JNDI和LDAP的结合使得Java开发者能轻松地管理和操作分布式目录服务,为企业的身份验证、授权和数据管理提供了强大支持。学习并熟练掌握这两者之间的交互对于提升Java应用的复杂性和可扩展性至关重要。通过...
import com.sun.jndi.ldap.ctl.VirtualListViewControl;
在IT行业中,JNDI(Java Naming and Directory Interface)是一个标准接口,用于访问各种命名和目录服务,如LDAP(Lightweight Directory Access Protocol)。本篇内容将深入探讨如何封装JNDI操作,以便更方便地与...
本文档提供了一个关于JNDI和LDAP的入门指南,涵盖了JNDI References的基础知识,LDAP协议的核心概念,包括命名模型、功能模型和安全模型,以及如何搭建和配置LDAP服务器。文档中的实例代码展示了如何利用Java技术栈...
通过这篇学习笔记,你可以深入理解DBCP和JNDI的结合使用,以及如何在实际项目中部署和配置。对于开发大型企业级应用来说,熟练掌握数据库连接池的使用是至关重要的,它能够显著提升应用的性能和稳定性。
通过上述介绍,我们了解到在Windows XP环境下安装和配置OpenLDAP的基本步骤,包括如何创建初始化数据、启动和测试LDAP服务器,以及如何使用JNDI API来编写Java程序访问LDAP服务器。这些知识点对于初学者来说非常实用...
jndi,就是命名服务(n:naming)和目录服务(d:directory). 命名服务:把对象映射到方便记忆的名字的机制.可以通过域名系统dns来理解,例如我们访问百度,只要输入www.baidu.com而不是百度的IP地址. 目录服务:其实也是一种...
在Java开发中,当我们需要与目录服务进行交互,例如用户认证、权限管理等,Spring LDAP和Java Naming and Directory Interface (JNDI)是两个常用的技术。本文将通过一个入门级的例子,详细介绍如何利用Spring LDAP和...
在Java开发中,直接使用JNDI API操作LDAP可能会涉及很多底层细节,包括连接设置、安全配置等,这增加了代码的复杂性和出错的可能性。因此,为了简化这一过程,通常会创建一个工具类来封装这些操作,使得开发者可以更...
AD ldap java集成
JNDI提供了与LDAP集成的能力,使得Java程序能够轻松地访问和管理LDAP服务器上的数据。 #### 三、示例代码解析 在给定的部分内容中,我们看到的是一个典型的JNDI操作示例。首先,定义了环境变量`env`,并初始化了...
集成配置与集成AD以及LDAP
通过 JNDI,开发者可以使用 Java 语言来访问和操作 LDAP 服务器。 在本文中,我们将讨论 Java 语言如何使用 JNDI 对 LDAP 服务器进行增删改查等操作。我们将使用一个简单的示例程序来演示如何使用 JNDI 连接到 LDAP...
开发者可能创建了各种示例,如RMI服务端和客户端的交互,JNDI查找和绑定对象到LDAP目录,JRMP的远程调用,JMX监控应用程序状态,以及JMS消息的发送和接收。通过这些测试,可以更好地理解和掌握这些技术的使用方式,...
关于JNDI的介绍和个人总结 还请多多指教 大家来分享学习 共同进步 谢谢