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);
}
}
分享到:
相关推荐
在了解了 LDAP 的基础概念之后,我们通过一个简单示例进一步理解!创建一个基础的 Spring Boot 项目,在 pom.xml 中引入两个重要依赖: ```xml <groupId>org.springframework.boot <artifactId>spring-boot-...
Java 操作 LDAP(Lightweight Directory Access Protocol,轻量目录访问协议)的简单实例是 Java 语言中访问和操作 LDAP 服务器的基本示例。本示例展示了如何使用 Java 语言连接 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_...
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=...
2. 有限的信息对象类型:LDAP目录中的信息对象类型相对固定,不支持复杂的数据结构和强大的查询语言,而是通过预定义的简单查询方法进行操作。 3. 结构化数据:LDAP目录采用层次结构,通过Distinguished Name (DN)来...
**Spring-Ldap 深度解析** ...总之,Spring-Ldap 是一个强大且灵活的工具,它让 LDAP 集成变得简单易行,如果你在工作中涉及到 LDAP 相关的开发,那么掌握 Spring-Ldap 将极大地提升你的工作效率。
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_...
以下是一个简单的示例,展示了如何使用Spring LDAP查询LDAP目录: ```java @Configuration public class LdapConfig { @Bean public ContextSource contextSource() { LdapContextSource contextSource = new ...
6. **自定义脚本**:可能支持通过编写简单的脚本来实现复杂的测试场景,提高测试的灵活性。 对于开发和运维人员来说,Go-ldap-test-tool 提供了一个便捷的界面或者命令行工具,使得 LDAP 测试工作更加高效。通过这...
这个压缩包可能还包含了简单的示例,帮助你快速入门。这些示例通常会展示如何初始化连接、执行搜索、处理结果以及进行基本的CRUD(创建、读取、更新、删除)操作。通过研究这些例子,你可以更好地理解如何将LDAP API...
以下是一个简单的示例代码 `Java4Ldap.java`: ```java import javax.naming.*; import javax.naming.directory.*; public class Java4Ldap { public static void main(String[] args) { // LDAP连接参数 ...
每个 LDAP 查询使用一个或多个搜索过滤器,它们决定了请求返回的目录项,搜索过滤器可以使用各种逻辑运算符来表示复杂的搜索条件,常用的搜索过滤器有简单匹配条件、析取查询、合取查询等。 但是,如果用户提交的...
下面是一个简单的Java LDAP查询示例: ```java import javax.naming.*; import javax.naming.ldap.InitialLdapContext; public class LdapExample { public static void main(String[] args) throws ...
我们将使用一个简单的示例程序来演示如何使用 JNDI 连接到 LDAP 服务器,并执行基本的操作。 连接 LDAP 服务器 ---------------- 要连接到 LDAP 服务器,需要使用 JNDI 的 LDAP 实现。首先,需要import 相应的类库...
下面是一个简单的示例代码: ```java public static void main(String[] args) throws UnknownHostException, IOException { // ... String adminName = "cn=administrator,cn=users,DC=security,DC=boco"; ...
创建一个简单的LDAP连接和查询示例: ```java Properties env = new Properties(); env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory"); env.put(Context.PROVIDER_URL, "ldap://...