JAVA_基本LDAP操作

合集下载

java jndi ldap 用法

java jndi ldap 用法

java jndi ldap 用法哎哟喂,各位看官,今儿咱来摆摆龙门阵,说说这四川话、贵州话、陕西话和北京话咋个结合起来,再给大家讲讲这Java JNDI LDAP的用法。

咱们先从轻松的话题开始,再慢慢引入正题,好让各位看官有个缓冲。

咱们四川人说话,那就是直来直去,不拐弯抹角。

就说这天气吧,热得跟蒸笼似的,让人喘不过气来。

贵州的朋友呢,说话细腻,就像他们那里的山水一样,清亮亮的。

陕西的老乡,说话豪爽,嗓门大,一听就知道是西北汉子。

北京的朋友,说话那就讲究个儿化音,听着特舒服。

好了,咱们言归正传,来说说这Java JNDI LDAP的用法。

首先啊,得明白这几个词儿是啥意思。

Java,那就是个编程语言,像咱们做菜用的调料一样,得有它才能编出好程序。

JNDI呢,就是Java Naming and Directory Interface,简单来说,就是个找东西的工具,能帮你找到需要的资源。

LDAP,轻量级目录访问协议,就像咱们查电话簿一样,能帮你找到想要的信息。

那么,这几个东西咋个结合起来用呢?简单说,就是通过Java编程语言,利用JNDI这个工具,去访问LDAP服务器上的资源。

就像咱们通过菜谱,用调料做菜一样,得有调料,还得会用,才能做出好吃的菜来。

具体来说,你得先配置好LDAP服务器,把需要的信息都放上去。

然后,在Java程序里,通过JNDI的API,去连接LDAP服务器,查找你需要的信息。

这个过程,就像咱们在电话簿里查找电话号码一样,得知道怎么查,才能找到想要的信息。

当然啦,这个过程也不是一帆风顺的,可能会遇到各种问题。

比如,连接不上服务器、找不到需要的信息等等。

这时候,就得看你的编程功底和经验了。

不过,只要掌握了基本的原理和方法,再加上不断的实践,相信你一定能够驾驭这个强大的工具,编出高效、稳定的程序来。

好了,今儿咱就聊到这儿吧。

希望这篇文章能让大家对这几个概念有个初步的了解,也能对Java JNDI LDAP的用法有个大致的把握。

ldap常用命令 -回复

ldap常用命令 -回复

ldap常用命令-回复LDAP(Lightweight Directory Access Protocol)是一种用于访问和维护分布式目录服务的协议。

它旨在提高对目录服务的访问效率,并使其易于使用和管理。

LDAP常用命令是进行LDAP操作的关键工具,本文将详细介绍LDAP常用命令及其用途。

1. ldapsearchldapsearch命令用于搜索和检索LDAP目录中的条目。

它可以使用不同的选项和过滤器来指定搜索条件。

例如,要搜索名称为"John Smith"的所有用户,可以使用以下命令:ldapsearch -x -b "dc=example,dc=com" "(cn=John Smith)"-x:使用简单认证模式进行连接;-b:指定要进行搜索的基准DN;"(cn=John Smith)":指定搜索的过滤条件,这里搜索名称为"John Smith"的条目。

ldapsearch命令将返回与搜索条件匹配的所有条目的详细信息,包括DN、属性和属性值。

2. ldapaddldapadd命令用于向LDAP目录中添加新的条目。

它需要一个LDIF (LDAP Data Interchange Format)文件作为输入,该文件描述了要添加的条目的结构和属性。

以下是一个示例:ldapadd -x -D "cn=admin,dc=example,dc=com" -W -f entry.ldif-D:指定进行操作的用户DN;-W:提示输入密码;-f:指定要添加的条目的LDIF文件。

ldapadd命令将读取LDIF文件,并将其中描述的条目添加到LDAP目录中。

3. ldapmodifyldapmodify命令用于修改LDAP目录中的现有条目。

它也需要一个LDIF文件作为输入,并根据其中的描述对目录进行修改。

ldaptemplate 构造

ldaptemplate 构造

标题:ldaptemplate 构造一、概述在Java开发中,使用LDAP(轻量级目录访问协议)进行用户和组织架构管理是很常见的需求。

为了方便对LDAP进行操作,Spring提供了ldaptemplate来简化LDAP的访问和操作。

本文将介绍如何使用ldaptemplate进行LDAP的构造。

二、依赖引入在使用ldaptemplate之前,需要在项目中引入相应的依赖。

可以通过Maven或Gradle来进行依赖管理,以下是Maven引入ldaptemplate的依赖方式:```xml<dependency><groupId>org.springframework.ldap</groupId><artifactId>spring-ldap-core</artifactId><version>2.3.2.RELEASE</version></dependency>```三、配置LDAP连接在使用ldaptemplate之前,首先需要配置LDAP的连接信息,包括LDAP服务器的URL、用户名、密码等。

通常可以通过Spring的配置文件(如application.properties或application.yml)来进行配置,以下是一个配置LDAP连接的示例:```propertiesldap.url=ldap://localhost:389ldap.base=dc=example,dcername=admin,dc=example,dcldap.password=admin```四、构造ldaptemplate构造ldaptemplate通常需要注入LdapContextSource和LdapTemplate两个Bean,其中LdapContextSource用于配置LDAP连接信息,而LdapTemplate用于执行LDAP操作。

ldapadmin使用手册

ldapadmin使用手册

ldapadmin使用手册一、简介ldapadmin是一款功能强大的LDAP(轻量目录访问协议)管理工具,它提供了用户友好的界面,用于管理和维护LDAP服务器上的目录。

本手册将向您介绍如何使用ldapadmin进行LDAP目录的管理。

二、安装和配置2.1 下载和安装ldapadmin1.打开ldapadmin的官方网站。

2.在下载页面选择适用于您操作系统的版本,然后单击下载按钮。

3.下载完成后,按照安装向导进行安装。

2.2 配置ldap服务器连接在首次启动ldapadmin之后,您需要配置与LDAP服务器的连接。

按照以下步骤进行配置: 1. 打开ldapadmin并选择“文件”>“设置”。

2. 在设置窗口中,选择“连接”选项卡。

3. 点击“添加”按钮,输入连接名称和LDAP服务器的主机名和端口号。

4. 输入管理员用户名和密码,并验证连接是否成功。

5. 单击“确定”保存配置。

三、目录管理3.1 创建目录项您可以使用ldapadmin创建新的目录项。

按照以下步骤进行操作: 1. 在ldapadmin的主界面上选择您要在其中创建目录项的上级目录。

2. 单击工具栏上的“新建目录项”按钮。

3. 在弹出的对话框中,输入新目录项的属性和值。

4. 单击“确定”按钮创建目录项。

3.2 编辑目录项您可以通过ldapadmin编辑目录项的属性和值。

按照以下步骤进行操作: 1. 在ldapadmin的主界面上选择要编辑的目录项。

2. 单击工具栏上的“编辑目录项”按钮。

3. 在弹出的对话框中,可以修改目录项的属性和值。

4. 单击“确定”按钮保存更改。

3.3 删除目录项如果您需要删除一个目录项,可以按照以下步骤进行操作: 1. 在ldapadmin的主界面上选择要删除的目录项。

2. 单击工具栏上的“删除目录项”按钮。

3. 单击“确定”按钮确认删除操作。

四、搜索和过滤4.1 执行搜索操作ldapadmin提供了强大的搜索功能,您可以根据特定的条件搜索目录项。

ldap简易教程

ldap简易教程

ldap简易教程OpenLdap 简易教程教程主旨是简单介绍ldap概念,Openldap 安装,配置,维护,以及java项目对ldap 的操作等。

BY:FrogchouchouE-Mail:****************目录总述: (2)1、获取资源及安装 (3)2、配置openldap (4)3、导入一些数据 (7)4、验证 (11)5、管理ldap (13)6、java 操作ldap (14)总结: (17)总述:LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。

目录服务是一种特殊的数据库系统,其专门针对读取,浏览和搜索操作进行了特定的优化。

目录一般用来包含描述性的,基于属性的信息并支持精细复杂的过滤能力。

目录一般不支持通用数据库针对大量更新操作操作需要的复杂的事务管理或回卷策略。

而目录服务的更新则一般都非常简单。

这种目录可以存储包括个人信息、web链结、jpeg图像等各种信息。

为了访问存储在目录中的信息,就需要使用运行在TCP/IP 之上的访问协议—LDAP。

LDAP目录中的信息是是按照树型结构组织,具体信息存储在条目(entry)的数据结构中。

条目相当于关系数据库中表的记录;条目是具有区别名DN(Distinguished Name)的属性(Attribute),DN是用来引用条目的,DN相当于关系数据库表中的关键字(Primary Key)。

属性由类型(Type)和一个或多个值(Values)组成,相当于关系数据库中的字段(Field)由字段名和数据类型组成,只是为了方便检索的需要,LDAP中的Type可以有多个Value,而不是关系数据库中为降低数据的冗余性要求实现的各个域必须是不相关的。

LDAP 中条目的组织一般按照地理位置和组织关系进行组织,非常的直观。

LDAP把数据存放在文件中,为提高效率可以使用基于索引的文件数据库,而不是关系数据库。

Java 操作LDAP代码

Java 操作LDAP代码

2009-08-12LDAP代码操作DemoLDAP操作代码样例初始化LDAP 目录服务上下文该例子中,我们使用uid=linly,ou=People,dc=jsoso,dc=net这个账号,链接位于本机8389端口的LDAP服务器(ldap://localhost:8389),认证方式采用simple类型,即用户名/密码方式。

private static void initialContext() throws NamingException{if(singleton == null){singleton = new LDAPConnection();/** 在实际编码中,这些环境变量应尽可能通过配置文件读取*///LDAP服务地址singleton.sLDAP_URL = "ldap://localhost:8389";//管理员账号singleton.sMANAGER_DN = "uid=linly,ou=People,dc=jsoso,dc=net"; //管理员密码singleton.sMANAGER_PASSWORD = "coffee";//认证类型singleton.sAUTH_TYPE = "simple";//JNDI Context工厂类singleton.sCONTEXT_FACTORY = "com.sun.jndi.ldap.LdapCtxFactory";singleton.envProps.setProperty(Context.INITIAL_CONTEXT_FACTORY, singleton.sCONTEXT_FACTORY);singleton.envProps.setProperty(Context.PROVIDER_URL,singleton.sLDAP_URL);singleton.envProps.setProperty(Context.SECURITY_AUTHENTICATION, singleton.sAUTH_TYPE);singleton.envProps.setProperty(Context.SECURITY_PRINCIPAL, singleton.sMANAGER_DN);singleton.envProps.setProperty(Context.SECURITY_CREDENTIALS, singleton.sMANAGER_PASSWORD);/** 绑定ldap服务器*/singleton.dirCtx = new InitialDirContext(singleton.envProps);}}通过一个Hashtable或者Properties对象为LDAP的Context设置参数,而后初始化InitialDirContext,即可绑定LDAP服务。

LDAP使用手册

LDAP使用手册

LDAP使用手册1.LDAP介绍LDAP就是一种目录,或称为目录服务。

LDAP的英文全称是Lightweight Directory Access Protocol,即轻量级目录访问协议,是一个标准化的目录访问协议,它的核心规范在RFC中都有定义[16][17]。

LDAP基于一种叫做X.500的标准,X.500是由ITU-T和ISO定义的目录访问协议,专门提供一种关于组织成员的电子目录使得世界各地因特网访问权限内的任何人都可以访问该目录。

在X.500目录结构中,需要通过目录访问协议DAP,客户机通过DAP查询并接收来自服务器目录服务中的一台或多台服务器上的响应,从而实现对服务器和客户机之间的通信控制。

然而DAP需要大量的系统资源和支持机制来处理复杂的协议。

LDAP仅采纳了原始X.500目录存取协议DAP的功能子集而减少了所需的系统资源消耗,而且可以根据需要进行定制。

在实际的应用中,LDAP比X.500更为简单更为实用,所以LDAP技术发展得非常迅速。

目前在企业范围内实现的支持LDAP的系统可以让运行在几乎所有计算机平台上的所有应用程序从LDAP目录中获取信息,LDAP目录中也可以存储各种类型的数据,如:电子邮件地址、人力资源数据、公共密匙、联系人列表,系统配置信息、策略信息等。

此外,与X.500不同,LDAP支持TCP,这对当今Internet来讲是必须的。

目前己有包括微软、IBM在内的几十家大型软件公司支持LDAP技术。

1997年发布了第三个版本LDAPV3[17],它的出现是LDAP协议发展的一个重要转折,它使LDAP协议不仅仅作为X.500的简化版,同时提供了LDAP协议许多自有的特性,使LDAP协议功能更为完备,安全性更高,生命力更为强大。

1.1组成LDAP的四个模型组成LDAP的四个模型是:信息模型,命名模型,功能模型,安全模型。

1.1.1信息模型LDAP信息模型定义能够在目录中存储的数据类型和基本的信息单位。

LDAP使用手册

LDAP使用手册

L D A P使用手册(共25页) -本页仅作为预览文档封面,使用时请删除本页-LDAP使用手册一、LDAP介绍LDAP是轻量级目录访问协议的简称(Lightweight Directory Access Protocol).用于访问目录服务。

它是目录访问协议的移植,但是简化了实现方法。

二、目录服务与关系数据库之间的区别a)目录查询操作比关系数据库有更高的效率,但是更新效率比关系数据库低b)目录不支持关系数据库那样的复杂查询,比如两个表的连接。

c)目录不支持多操作的事物完整性,没有方式确认一些操作是全部成功还是全部失败d)目录能够能好和更灵活的支持子查询和匹配查询e)目录协议更适合应用于广域网,比如因特网或者大型公司的网络f)目录的管理,配置,和调试比关系型数据库更简单g)在使用关系数据库之前,必须首先定义表结构(模式)才可以进行操作。

而目录中所使用的模式是由LDAP定义好的一系列类组成的。

对于目录中的每条记录中必须属于其中的一个类或者多个类。

这些类定义了该记录中可以存储的信息。

h)目录以对象的形式存储数据。

信息被组织成树型结构。

i)目录服务支持分布式存储结构,容易实现数据的扩展,能满足大容量存储的要求。

三、LDAP的优点1:可以存储在其它条件下很难存储的管理信息2:数据安全可靠,访问控制粒度细腻。

3:LDAP是一个标准的,开放的协议,具有平台无关性。

4:数据分布广,规模可灵活扩充。

5:LDAP目录服务器可以使任何一种开放源代码或商用的LDAP目录服务器。

四、LDAP模型LDAP模型是从协议中继承过来的。

是LDAP的一个组成部分,用于指导客户如何使用目录服务LDAP 定义了四个模型,包括信息模型,命名模型,功能模型,安全模型。

信息模型(LDAP information model)LDAP信息模型用于描述LDAP中信息的表达方式。

LDAP信息模型包含三部分Entries Attributes ValuesEntry:Directry中最基本的信息单元,Entry中所包含的信息描述了现实世界中的一个真实的对象,在目录系统中它可以理解为,目录树中的一个节点。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

一、简介
Lightweight Directory Access Protocol (LDAP),轻型目录访问协议是一个访问在线目录服务的协议。

下面的例子中简单介绍在java中队ldap的增删该查功能。

目录结构为:
CD=CAS,DC=MYDC
--cn=users
----uid=zhangsan
二、示例
1、通过LdapContext连接ldap
[java]
/**
* 连接LDAP
*/
@SuppressWarnings({ "rawtypes", "unchecked" })
public LdapContext connetLDAP() throws NamingException {
// 连接Ldap需要的信息
String ldapFactory = "com.sun.jndi.ldap.LdapCtxFactory";
String ldapUrl = "ldap:/IP:port";// url
String ldapAccount = "cn=root"; // 用户名
String ldapPwd = "password";//密码
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, ldapFactory);
// LDAP server
env.put(Context.PROVIDER_URL, ldapUrl);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, ldapAccount);
env.put(Context.SECURITY_CREDENTIALS, ldapPwd);
env.put("java.naming.referral", "follow");
LdapContext ctxTDS = new InitialLdapContext(env, null);
return ctxTDS;
}
2、增加用户zhangsan
[java]
// 添加
public void testAdd() throws Exception {
LdapContext ctx = connetLDAP();
Attributes attrs = new BasicAttributes(true);
Attribute objclass = new BasicAttribute("objectclass");
// 添加ObjectClass
String[] attrObjectClassPerson = { "inetOrgPerson", "organizationalPerson", "person", "top" };
Arrays.sort(attrObjectClassPerson);
for (String ocp : attrObjectClassPerson) {
objclass.add(ocp);
}
attrs.put(objclass);
String uid = "zhangsan";
String userDN = "uid=" + uid + "," + "cn=users,dc=cas,dc=mydc";
// 密码处理
// attrs.put("uid", uid);
attrs.put("cn", uid);
attrs.put("sn", uid);
attrs.put("displayName", "张三");
attrs.put("mail", "abc@");
attrs.put("description", "");
attrs.put("userPassword", "Passw0rd".getBytes("UTF-8"));
ctx.createSubcontext(userDN, attrs);
}
3、删除用户zhangsan
[java]
//删除
public void testRemove() throws Exception {
LdapContext ctx = connetLDAP();
String uid = "zhangsan";
String userDN = "uid=" + uid + "," + "cn=users,dc=cas,dc=mydc";
ctx.destroySubcontext(userDN);
}
4、修改zhangsan的邮件地址
[java]
//修改
public boolean testModify() throws Exception {
boolean result = true;
LdapContext ctx = connetLDAP();
String uid = "zhangsan";
String userDN = "uid=" + uid + "," + "cn=users,dc=cas,dc=mydc";
Attributes attrs = new BasicAttributes(true);
attrs.put("mail", "zhangsan@");
ctx.modifyAttributes(userDN, DirContext.REPLACE_ATTRIBUTE, attrs);
return result;
}
5、查找用户
[java]
//查询
public void testSearch() throws Exception {
LdapContext ctx = connetLDAP();
// 设置过滤条件
String uid = "zhangsan";
String filter = "(&(objectClass=top)
(objectClass=organizationalPerson)(uid=" + uid + "))";
// 限制要查询的字段内容
String[] attrPersonArray = { "uid", "userPassword", "displayName", "cn", "sn", "mail", "description" };
SearchControls searchControls = new SearchControls();
searchControls.setSearchScope(SearchControls.SUBTREE_SCOPE);
// 设置将被返回的Attribute
searchControls.setReturningAttributes(attrPersonArray);
// 三个参数分别为:
// 上下文;
// 要搜索的属性,如果为空或 null,则返回目标上下文中的所有对象;
// 控制搜索的搜索控件,如果为 null,则使用默认的搜索控件
NamingEnumeration<SearchResult> answer = ctx.search
("cn=users,dc=cas,dc=mydc", filter.toString(), searchControls);
// 输出查到的数据
while (answer.hasMore()) {
SearchResult result = answer.next();
NamingEnumeration<? extends Attribute> attrs = result.getAttributes ()。

getAll();
while (attrs.hasMore()) {
Attribute attr = attrs.next();
System.out.println(attr.getID() + "=" + attr.get());
}
System.out.println("============");
}
}。

相关文档
最新文档