LDAP被广泛用来存储企业基础数据,如人员、组织机构、设备等等,而且LDAP通常作为集中的数据源,被各个业务系统使用。员工入职,需要及时为员工创建各个系统的帐号。目前基本上每个公司都有好几套业务系统,可能有很多个管理员,人多了麻烦事就来了……如果当LDAP服务器数据变化时,实时响应,执行同步或者其他一些操作,那就可以极大提高企业信息化水平,减少不必要的维护成本。说了那么多废话,下面才是正题,一个简单的ldap监听器例子,可以响应ldap服务器数据的变化,那样就可以做我们想要做的事情了。
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.naming.event.EventContext;
import javax.naming.event.NamespaceChangeListener;
import javax.naming.event.NamingEvent;
import javax.naming.event.NamingExceptionEvent;
import javax.naming.event.NamingListener;
import javax.naming.event.ObjectChangeListener;
import javax.naming.ldap.UnsolicitedNotificationEvent;
import javax.naming.ldap.UnsolicitedNotificationListener;
/**
* LDAP 事件监听器测试
*/
class LDAPListenerTest {
public static void main(String[] args) {
// Set up environment for creating initial context
Hashtable<String, Object> env = new Hashtable<String, Object>(11);
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, "ldap://localhost:389");
env.put(Context.SECURITY_PRINCIPAL, "cn=Manager");
env.put(Context.SECURITY_CREDENTIALS, "secret");
try {
// Get event context for registering listener
String baseDN = "ou=07,ou=csg,o=serc,c=cn";
EventContext ctx = (EventContext) (new InitialContext(env).lookup(baseDN));
// Create listener
NamingListener unsolListener = new UnsolicitedNotificationListener() {
public void notificationReceived(UnsolicitedNotificationEvent evt) {
System.out.println("received: " + evt + ",notification:" + evt.getNotification());
}
public void namingExceptionThrown(NamingExceptionEvent evt) {
System.out.println(">>> UnsolListener got an exception");
evt.getException().printStackTrace();
}
};
NamingListener namespaceListener = new NamespaceChangeListener() {
public void objectAdded(NamingEvent evt) {
System.out.println("objectAdded: " + evt.getOldBinding() + "\n=> " + evt.getNewBinding());
System.out.println("\tchangeInfo: " + evt.getChangeInfo());
}
public void objectRemoved(NamingEvent evt) {
System.out.println("objectRemoved: " + evt.getOldBinding() + "\n=> " + evt.getNewBinding());
System.out.println("\tchangeInfo: " + evt.getChangeInfo());
}
public void objectRenamed(NamingEvent evt) {
System.out.println("objectRenamed: " + evt.getOldBinding() + "\n=> " + evt.getNewBinding());
System.out.println("\tchangeInfo: " + evt.getChangeInfo());
}
public void namingExceptionThrown(NamingExceptionEvent evt) {
System.err.println(">>>NamespaceChangeListener Exception");
evt.getException().printStackTrace();
}
};
NamingListener objectListener = new ObjectChangeListener() {
public void objectChanged(NamingEvent evt) {
System.out.println("objectChanged: " + evt.getOldBinding() + "\n\t=> " + evt.getNewBinding());
System.out.println("\tchangeInfo: " + evt.getChangeInfo());
}
public void namingExceptionThrown(NamingExceptionEvent evt) {
System.err.println(">>>ObjectChangeListener Exception");
evt.getException().printStackTrace();
}
};
// Register listener with context (all targets equivalent)
ctx.addNamingListener("", EventContext.SUBTREE_SCOPE, unsolListener);
ctx.addNamingListener("", EventContext.SUBTREE_SCOPE, namespaceListener);
ctx.addNamingListener("", EventContext.SUBTREE_SCOPE, objectListener);
System.out.println("Listener to LDAP server ...");
// Wait 1 minutes for listener to receive events
try {
Thread.sleep(60000 * 60);
} catch (InterruptedException e) {
System.out.println("sleep interrupted");
}
// Not strictly necessary if we're going to close context anyhow
ctx.removeNamingListener(unsolListener);
// Close context when we're done
ctx.close();
System.out.println("Remove Listener ...");
} catch (NamingException e) {
e.printStackTrace();
}
}
}
测试环境是OpenDS2.0,如有什么问题欢迎联系我,kylixs@qq.com
分享到:
- 2009-07-15 17:01
- 浏览 5576
- 评论(3)
- 论坛回复 / 浏览 (0 / 3029)
- 查看更多
相关推荐
标题 "ldap 访问AD测试" 暗示了我们即将探讨的是如何使用 Lightweight Directory Access Protocol (LDAP) 来访问和交互Active Directory (AD) 架构。在IT环境中,AD是一个广泛使用的目录服务,用于管理和组织用户、...
LDAP的java测试程序,可以用来测试你的LDAP配置是否正确
LDAPBrowser4.5 x86 32位系统使用的LDAP测试工具
这个"ldap读取 测试使用"的项目显然是一个使用Java实现的LDAP查询工具,目的是为了帮助开发者进行快速的LDAP操作测试。 在`LdapUtils.java`文件中,我们可以预期它包含了一些关键的Java类和方法,这些可能包括: 1...
**LDAP HelloWorld 基本例子详解** 在本文中,我们将深入探讨如何配置、安装和使用LDAP(轻量级目录访问协议)进行基本操作。LDAP是一个开放标准,用于存储和检索目录信息,常用于身份验证、权限管理和组织数据的...
【Go-ldap-test-tool:一个轻量级的LDAP测试工具】 在信息技术领域,LDAP(Lightweight Directory Access Protocol)是一种用于访问和管理分布式目录服务的标准协议。它被广泛应用于组织内部的身份验证、用户权限...
测试LDAP注入 LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)是一种用于访问网络中的目录服务的协议,目录是一个分级结构的数据存储区,其中可能包含任何类型的信息,但常用于保存个人信息,...
这个压缩包“ldap相关代码例子.rar”包含了几个关键元素来帮助理解并实践LDAP操作。 1. **ApplicationTest.java** - 这是一个Java源代码文件,很可能是用于演示如何在Java应用程序中与LDAP服务器进行交互。在Java中...
### C语言操作LDAP示例详解 #### 一、概述 本篇将详细介绍如何使用C语言进行LDAP(Lightweight Directory Access Protocol)的操作。LDAP是一种用于访问和管理目录服务的应用层协议,广泛应用于用户身份验证、权限...
本资料包聚焦于ldap的测试方面,特别是与嵌入式环境相关的测试。 首先,我们要理解LDAP的基础知识。LDAP目录服务是一种树形结构,其中每个条目都有一个唯一的DN(Distinguished Name),类似于人的身份证号。条目...
6. **调试与性能分析**:内置 LDAP 操作的调试器和性能分析器,有助于优化 LDAP 服务器的性能和解决问题。 **关于 LDAP 和 Active Directory 的关联:** LDAP 是一种轻量级目录访问协议,广泛应用于组织的目录服务...
它简化了与LDAP目录的交互,通过提供模板类、操作构建器和强大的对象绑定模型,使得代码更加简洁、易于测试。在这个例子中,我们可能会看到如何配置`applicationContext.xml`文件来设置Spring LDAP环境。 首先,`...
2. **搜索与过滤**:提供强大的搜索功能,允许用户根据特定条件查找目录中的信息,支持使用 LDAP 查询过滤器。 3. **编辑与创建**:用户可以创建新的目录条目,编辑现有条目的属性,或者删除不再需要的条目。 4. **...
- **vimslapd.conf**:`slapd.conf`是OpenLDAP服务器的主要配置文件,通过`vim`或其它文本编辑器对其进行编辑,可以调整LDAP服务的各种参数和选项。例如,添加如下两行配置: ```plaintext # 日志级别 logfile /...
8. **测试连接**:使用LdapBrowser或其他工具验证服务器的可访问性和数据的正确性。 **使用LdapBrowser 2.82版** 1. **连接设置**:在LdapBrowser中输入服务器地址、端口、认证方式等信息,建立连接。 2. **浏览...
**LDAP浏览器:深入理解与应用** LDAP(轻量级目录访问协议)是一种用于查询和管理分布式目录服务的网络协议,广泛应用于企业环境中的用户身份验证、权限管理和数据共享。LdapBrowser是一款专为开放源代码的...