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
- 浏览 5517
- 评论(3)
- 论坛回复 / 浏览 (0 / 3001)
- 查看更多
相关推荐
LDAP的java测试程序,可以用来测试你的LDAP配置是否正确
LDAPBrowser4.5 x86 32位系统使用的LDAP测试工具
博文链接:https://balaschen.iteye.com/blog/88178
ldap测试文件,可以简单修改基本参数,就可以执行main方法,希望对你有所帮助
ldap相关代码例子.rar
1.1 下载相关软件包至/usr/local/src目录 7 1.2 安装openssl 7 1.3 配置库文件搜索路径 8 1.4 查看openssl的版本号,以验正是否安装正确 8 3.1 下载相关软件至/usr/local/src 11 ...3.2.5 一个例子 30
c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例c操作ldap例
ldap测试相关资料,嵌入式ldap,测试
ldap-test-tool 一个轻量级的 ldap 测试工具
测试LDAP注入
由于这些我也是才入门的时候写的,进行测试等用的,所以比较适合新手,对学习LDAP,extjs会有一定的帮助。 (需要改正的是extjs里那个节点的id要加上前面的id才行,比如ou=mail; 那它的子节点cn=wang的id应该是...
ldap相关技术记录,一.使用LDAP Browser管理LDAP配置,在LDAP启动的状态下,使用config修改LDAP日志的属性,修改后不用重启LDAP,属性自动应用。 修改其他属性也是自动应用,前提是这个属性的修改是正确的。 测试记录
LDAP入門,LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門LDAP入門
ldap c# 测试工具以及源代码(vs2010 winform .net2.0) 里面可以测试各种连接,主要是用来验证用户和密码是否正确
使用spring-ldap-core测试链接ldap com.ldap.test.service包下为Junit测试类
ldapbrowser,ldap测试工具,还不错
LdapBrowser2.82版,能浏览服务器的ldap数据,还有一份word详细使用文档及ldap安装说明