import java.util.Enumeration;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.BasicAttribute;
import javax.naming.directory.BasicAttributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.naming.directory.ModificationItem;
import javax.naming.directory.SearchControls;
import javax.naming.directory.SearchResult;
public class LdapTest {
public static void main(String[] args) {
String account = "admin";
String password = "1";
String root = "o=com"; // root
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389/" + root);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=" + account + "," + root);
env.put(Context.SECURITY_CREDENTIALS, password);
DirContext ctx = null;
try {
// 链接ldap
ctx = new InitialDirContext(env);
System.out.println("ldap认证成功");
// 3.添加节点
String newUserName = "user2";
BasicAttributes attrsbu = new BasicAttributes();
BasicAttribute objclassSet = new BasicAttribute("objectclass");
objclassSet.add("person");
objclassSet.add("top");
objclassSet.add("organizationalPerson");
objclassSet.add("inetOrgPerson");
attrsbu.put(objclassSet);
attrsbu.put("sn", newUserName);
attrsbu.put("uid", newUserName);
ctx.createSubcontext("cn=" + newUserName, attrsbu);
// 5.修改节点
account = "user2";
String newDisplayName = "newDisplayName";
ModificationItem modificationItem[] = new ModificationItem[1];
modificationItem[0] = new ModificationItem(DirContext.REPLACE_ATTRIBUTE, new BasicAttribute("displayName", newDisplayName));
ctx.modifyAttributes("cn=" + account, modificationItem);
// 查询节点
SearchControls constraints = new SearchControls();
constraints.setSearchScope(SearchControls.SUBTREE_SCOPE);
// constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE);
NamingEnumeration en = ctx.search("", "cn=user2", constraints); // 查询所有用户
while (en != null && en.hasMoreElements()) {
Object obj = en.nextElement();
if (obj instanceof SearchResult) {
SearchResult si = (SearchResult) obj;
System.out.println("name: " + si.getName());
Attributes attrs = si.getAttributes();
if (attrs == null) {
System.out.println("No attributes");
} else {
for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements();) {
Attribute attr = (Attribute) ae.next();
String attrId = attr.getID();
for (Enumeration vals = attr.getAll(); vals.hasMoreElements();) {
System.out.print(attrId + ": ");
Object o = vals.nextElement();
if (o instanceof byte[])
System.out.println();// new
// String((byte[])o)
else
System.out.println(o);
}
}
}
} else {
System.out.println(obj);
}
System.out.println();
}
// 4.删除节点
account = "user2";
ctx.destroySubcontext("cn=" + account);
} catch (javax.naming.AuthenticationException e) {
System.out.println("认证失败");
} catch (Exception e) {
System.out.println("认证出错:");
e.printStackTrace();
}
if (ctx != null) {
try {
ctx.close();
} catch (NamingException e) {
// ignore
}
}
System.exit(0);
}
}
分享到:
相关推荐
Java 操作 LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)的简单实例是 Java 语言中访问和操作 LDAP 服务器的基本示例。本示例展示了如何使用 Java 语言连接 LDAP 服务器,执行搜索操作,并获取...
在了解了 LDAP 的基础概念之后,我们通过一个简单示例进一步理解!创建一个基础的 Spring Boot 项目,在 pom.xml 中引入两个重要依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-...
### C语言操作LDAP示例详解 #### 一、概述 本篇将详细介绍如何使用C语言进行LDAP(Lightweight Directory Access Protocol)的操作。LDAP是一种用于访问和管理目录服务的应用层协议,广泛应用于用户身份验证、权限...
LDAP是一种基于X.500标准的目录访问协议,但它更简单、更灵活,可以根据需要进行定制。LDAP支持TCP/IP协议,使其可以在Internet上进行访问。 LDAP目录可以存储各种类型的数据,如电子邮件地址、邮件路由信息、人力...
以下是一个简单的 LDAP 绑定和搜索操作示例: ```php $ldap_server = 'ldap.example.com'; $ldap_dn = 'cn=Manager,dc=example,dc=com'; $ldap_password = 'secret'; // 连接 LDAP 服务器 $ldap_conn = ldap_...
6. **自定义脚本**:可能支持通过编写简单的脚本来实现复杂的测试场景,提高测试的灵活性。 对于开发和运维人员来说,Go-ldap-test-tool 提供了一个便捷的界面或者命令行工具,使得 LDAP 测试工作更加高效。通过这...
5. **示例应用**:可能包含使用LDAP进行身份验证或查询的简单应用程序,用于演示如何与LDAP服务器交互。 6. **文档**:可能包括关于LDAP概念、命令行工具和API使用的详细文档。 学习和理解这些内容,你可以: - **...
下面是一个简单的使用jLDAP进行SSL连接并查询LDAP目录的Java代码示例: ```java import com.novell.ldap.*; public class LDAPSSLExample { public static void main(String[] args) { String ldapUrl = "ldaps:...
以下是一个简单的示例代码: ```python import ldap # 连接 LDAP 服务器 l = ldap.initialize('ldap://your_ldap_server') l.protocol_version = ldap.VERSION3 # 搜索用户信息 base_dn = 'dc=your_domain,dc=...
我们将使用一个简单的示例程序来演示如何使用 JNDI 连接到 LDAP 服务器,并执行基本的操作。 连接 LDAP 服务器 ---------------- 要连接到 LDAP 服务器,需要使用 JNDI 的 LDAP 实现。首先,需要import 相应的类库...
2. 有限的信息对象类型:LDAP目录中的信息对象类型相对固定,不支持复杂的数据结构和强大的查询语言,而是通过预定义的简单查询方法进行操作。 3. 结构化数据:LDAP目录采用层次结构,通过Distinguished Name (DN)来...
**Spring-Ldap 深度解析** ...总之,Spring-Ldap 是一个强大且灵活的工具,它让 LDAP 集成变得简单易行,如果你在工作中涉及到 LDAP 相关的开发,那么掌握 Spring-Ldap 将极大地提升你的工作效率。
Spring LDAP是Spring框架的一部分,它提供了一种简单的方式来访问和操作LDAP目录服务。下面将详细阐述这一主题。 ### Spring LDAP的概述 Spring LDAP为开发人员提供了高级抽象层,简化了与LDAP服务器的交互过程。...
下面展示如何使用Python编程语言与LDAP服务器交互的一个简单示例: ```python from ldap3 import Server, Connection, ALL # 连接LDAP服务器 server = Server('ldap.example.com', get_info=ALL) conn = ...
8. **示例代码**:可能提供了一些使用特定编程语言(如Java或Python)实现的示例代码,展示如何编写LDAP查询和操作。 9. **最佳实践**:关于在实际环境中使用LDAP访问AD时应遵循的一些最佳实践,以确保安全性和性能...
以下是一个简单的连接示例: ```cpp #include <ldap.h> Ldap* ldap_init(const char* url) { Ldap* ld = ldap_init(url, LDAP_PORT); if (ld == nullptr) { // 处理错误 } return ld; } int ldap_simple_...
- **管理简易性**:目录的管理和配置比关系数据库更简单。 - **模式定义**:在关系数据库中需要预先定义表结构,而在目录中,模式是预定义的一系列类,记录必须属于至少一个类。 - **数据组织**:目录以对象形式存储...
它使用ASN.1(抽象语法符号一号)编码规则,支持多种认证机制,如简单的绑定、SASL(安全认证层系统)等。 要开始编写基于LDAP的Web应用程序,你需要安装Go语言环境并设置好工作区。之后,引入必要的依赖库,其中`...