什么是LDAP?
LDAP(轻量目录访问协议),简单的说,LDAP是一个能得到关于人或者资源的集合、静态数据的快速方式。
这种说法似乎有点抽象,结合这几天在做的一个项目具体来谈一下。
AD,LDAP,初来乍到的面对这些在课本上不可能碰到的新术语还真是有些懵了,查了大量的资料之后,终于开始有点感觉了。
大多数企业及单位都会有人员管理系统,而有很多是用window server进行管理的,其中的原因相信大家早已明白:简单,方便。但是很多时候我们会需要利用程序获取服务器上面的人员数据,听起来似乎无从下手,但由于资源大多是保存在AD域下面的,于是LDAP能够帮我们轻易的完成这件事。
最开始找了很多的程序,但都走了弯路,因为这些程序大多没有解释几个关键概念:
OU(组织单元):你可以理解为目录信息
O(组织名):可以理解为公司名,比如说O=foobar.com,但是更多情况下我们会把它拆分为DC=foobar,DC=com(实践发现使用O会出现连接错误,不知道是否这种表示方式已经被DC替代)。
下面是一段实例代码,之后会解释了各个字段的意思及用法:
package ldap; import java.util.Iterator; import com.novell.ldap.LDAPAttributeSet; import com.novell.ldap.LDAPConnection; import com.novell.ldap.LDAPEntry; import com.novell.ldap.LDAPException; import com.novell.ldap.LDAPSearchResults; public class LdapCon { public static void main(String[] args) { LdapCon lc=new LdapCon(); try { lc.conenction(); } catch (LDAPException e) { e.printStackTrace(); } } private static void conenction() throws LDAPException{ String MY_HOST = "192.168.139.132";//访问AD域的IP地址 int MY_PORT = 389;//端口号,默认为389 LDAPConnection ld = new LDAPConnection(); // ld.setSocketTimeOut(21000);//设置超时 ld.connect( MY_HOST, MY_PORT ); // ld.bind(null, null); ld.bind("Administrator@smallbusiness.local", "123456"); String searchBase = "OU=项目部,DC=smallbusiness,DC=local";//域名入口 int searchScope = LDAPConnection.SCOPE_SUBORDINATESUBTREE;//搜索范围 //过滤器 String filter="(|(objectclass=person)(objectclass=user)(objectclass=organizationalPerson))"; LDAPSearchResults searchResults =ld.search(searchBase, searchScope, filter, null, false); while ( searchResults.hasMore()) { LDAPEntry nextEntry = searchResults.next(); System.out.println("We found "+nextEntry.getDN()); // LDAPAttributeSet attributeSet = nextEntry.getAttributeSet(); // Iterator ite=attributeSet.iterator(); // while(ite.hasNext()){ // System.out.println(ite.next()); // } } } }
具体的解释一下下面这几个概念
Ld.bind(loginDN,loginPW):表示LDAPConnection的绑定,不能省略,你可以输入两个null来进行匿名登录,当然,以匿名方式登录并不代表你具有所有的权限。下面就来说一下这两个参数到底应该怎么填,尝试了很多种方法,DN表示域名,根据这种命名方法来猜测,loginDN应该是登录名加域名的表示方式,而你在windwos server的AD域中进行用户添加的时候就会发现,用户唯一标示名的表示方式是login@DN,密码则是对应用户的密码。
ld.setSocketTimeOut(int),设置连接超时,这个方法并没有产生实际的效果,因为即使不设置,服务器在连接不上的时候依然会超时。
Search Scope:表示搜索的深度,有四个基本参数:
• SCOPE_BASE. 这个只在你已经知道了目录结构的时候使用,你用这种搜索方式输出的时候会发现什么都看不到
• SCOPE_ONE. 只搜索处在该层目录的数据(也就是说如果存在多层结构,处在该层目录一下的目录里面的数据就搜不到)。
• SCOPE_SUB. 按层次遍历,可以搜到该目录下面的所有数据,包含目录.
• SCOPE_SUBORDINATESUBTREE. 搜索的形式跟上面一个一样,但是不包含基础的数据,具体什么含义,试试就知道了。
Filter:过滤器,and = "&" filterlist,or = "|" filterlist,not = "!" filterlist,就像我代码中写到的一样以|开头,表示条件或。还有一种表示方式就是objectClass=*,使用通配符表示所有。
有了数据你自然明白该做什么了O(∩_∩)O~,不过还有一点依然需要强调,就像很多前辈跟我说过的,学好算法跟数据结构,前两天想单纯依靠循环的逻辑控制解决目录结构的问题,但努力之后才发现,利用多叉树解决要快得多,虽然我一开始就意识到目录本身就是一个树状结构,但是加以实践才是问题的最好答案。算法和数据结构受到如此之重视就是因为用对了的算法和数据结构有可能使你的代码在效率和简洁度上出现意想不到的结果。
路漫漫其修远兮~
相关推荐
Java 连接和验证 LDAP 文档 Java 连接和验证 LDAP 文档是一份关于 Java 语言连接和验证 LDAP 服务器的学习...通过使用 Java 6.0 API for LDAP,可以轻松地连接和访问 LDAP 服务器,实现目录服务中的数据访问和管理。
我们使用InitialDirContext类来创建一个LDAP连接,然后使用Hashtable类来存储LDAP连接的参数。最后,我们使用 DirContext接口来访问LDAP目录。 使用LDAP进行用户认证可以提供一个可靠、可用、可复制的身份验证机制...
本文将深入探讨如何使用Java通过LDAP(轻量级目录访问协议)和SSL(安全套接层)来实现用户和组织(部门)的增删改查操作,并结合证书确保通信的安全性。这些功能通常用于大型企业的用户管理,例如Active Directory...
下面我们将深入探讨如何使用Java和SpringBoot实现基于LDAP的AD域账号验证。 首先,我们需要了解LDAP的基本结构。LDAP目录通常采用树形结构,其中包含多个条目(entries),每个条目都有唯一的DN(Distinguished ...
### Java与LDAP连接 1. **JNDI(Java Naming and Directory Interface)**:是Java中用于访问命名和目录服务的API,包括与LDAP的交互。 2. **连接配置**:通过`InitialDirContext`实例化,提供URL(如`ldap://...
Java连接LDAP服务器是一种常见的任务,尤其在企业级应用中,用于身份验证、用户管理或访问控制。LDAP(轻量级目录访问协议)是一种基于X.500标准的目录服务协议,它允许快速查找和管理分布式数据库中的信息。在Java...
在这篇文章中,我们将探讨使用 JAVA 实现 LDAP 的 AD 域免证书查询、修改、删除、新增、启用、禁用和修改密码的操作。 首先,让我们了解什么是 LDAP 和 AD 域。LDAP(Lightweight Directory Access Protocol)是一...
Java LDAP+CAS单点登录是一种常见的企业级身份验证和授权解决方案。这个技术组合允许用户只需登录一次,就可以访问多个相互独立的应用系统,提高了用户体验并增强了安全性。以下是对这个主题的详细解释: **LDAP...
创建一个简单的LDAP连接和查询示例: ```java Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://...
1. **建立连接:**通过`LdapHelper.java`类,初始化与LDAP服务器的连接。该类利用`javax.naming.directory`包下的`DirContext`接口及其子类`InitialDirContext`来实现。环境配置参数包括: - `Context.INITIAL_...
为了通过Java实现对Active Directory的验证,我们可以使用JNDI API(Java Naming and Directory Interface),它提供了与不同目录服务(如LDAP)交互的接口。 下面是一段示例代码,展示了如何使用Java进行验证: `...
本案例将介绍如何使用Java编程语言操作LDAP服务器,实现用户登录验证等功能。 首先,我们需要了解Java中的JNDI(Java Naming and Directory Interface)框架,它是Java提供的一套标准API,用于与各种命名和目录服务...
Java LDAP(轻量级目录访问协议)操作是Java开发者在处理目录服务时常见的任务,尤其在需要进行身份验证、用户管理或企业应用集成时。LDAP是一种开放标准的网络协议,用于存储和检索分布式目录信息。在Java中,我们...
总的来说,Java通过Ldap操作AD域涉及网络连接、身份验证、目录查询以及可能的SSL安全通信。理解这些概念和API的使用是实现AD域集成的关键。通过以上介绍和示例代码,你应该能够开始编写自己的AD域操作功能。记得在...
这里使用的是JNDIRealm,即Java Naming and Directory Interface Realm,它可以连接到LDAP服务器并进行身份验证。 Realm元素的各个属性的解释: * className:指定Realm的实现类,这里使用的是JNDIRealm。 * ...
LDAP在Java环境中尤其重要,因为它允许Java应用程序与LDAP服务器进行交互,实现身份验证、授权以及数据检索等功能。 **Java LDAP库** 在Java中,我们可以使用Java LDAP API来与LDAP服务器通信。这个API包含在Java...
**实现Java LDAP验证Active Directory** 在Java中,可以通过JNDI (Java Naming and Directory Interface) API来与LDAP目录服务交互,包括Active Directory。以下是一个简单的示例代码,用于验证用户身份: ```java...
《LDAP编程与Java》这本书是关于使用Java进行 Lightweight Directory Access Protocol (LDAP) 开发的指南。LDAP是一种开放标准的网络协议,用于访问和管理分布式目录服务。它在企业级应用中广泛使用,如用户身份验证...
Java操作LDAP( Lightweight Directory Access Protocol)在SpringBoot工程中的实现主要涉及到的是企业级的身份验证与目录服务。LDAP是一种开放的标准协议,广泛用于存储用户账户、组信息和其他元数据。在这个项目中...
在IBM的软件栈中, LDAP被用来支持其大型机、中间件、安全产品以及其他企业级应用的身份验证和授权。`ldapbrowser`作为一个IBM类工具,可能意味着它具有与IBM系统或服务集成的能力,或者是IBM推荐的用于管理其LDAP...