package com.wisdombud.unicom.monitor.ldap;

import java.util.ArrayList;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import com.unboundid.ldap.sdk.Attribute;
import com.unboundid.ldap.sdk.LDAPConnection;
import com.unboundid.ldap.sdk.LDAPException;
import com.unboundid.ldap.sdk.Modification;
import com.unboundid.ldap.sdk.ModificationType;
import com.unboundid.ldap.sdk.SearchRequest;
import com.unboundid.ldap.sdk.SearchResult;
import com.unboundid.ldap.sdk.SearchResultEntry;
import com.unboundid.ldap.sdk.SearchScope;
import com.unboundid.ldap.sdk.controls.SubentriesRequestControl;
import com.wisdombud.unicom.monitor.listener.MessageAnalyze; public class LdapOper {
private static final Logger LOGGER = LoggerFactory
.getLogger(MessageAnalyze.class);
private LDAPConnection connection = null;
private String bindDN = "cn=root,o=ibm,c=cn"; private int port = 389;
private String password = "db2admin";
private String o = "ibm";
private String ou = "users";
private String ouEntry = "o=ibm,c=cn";
private String oEntry = "o=ibm,c=cn";
private String dcEntry = "o=ibm,c=cn";
private String groupEntry = "cn=permitted,o=ibm,c=cn";
private String LDAP_HOST = "127.0.0.1";
static {
//GlobalValues.LDAP_HOST = "127.0.0.1";
// MonitorConfigBean config = CollectDaoFactory.getInstance()
// .getCollectDao().findConfig();
// if (config != null) {
// GlobalValues.LDAP_HOST = config.getLdapIp();
// } else {
//
// GlobalValues.LDAP_HOST = "127.0.0.1";
// }
} public void RunTest() { // LOGGER.info(this.ldapConfig.getLdapHost());
this.openConnection();
} public void openConnection() {
if (connection == null) {
try {
connection = new LDAPConnection(LDAP_HOST, port,
bindDN, password);
LOGGER.info("connect success");
} catch (Exception e) {
LOGGER.info("连接LDAP出现错误:\n" + e.getMessage());
}
}
} private void createO() {
String entryDN = this.oEntry;
try {
openConnection(); SearchResultEntry entry = connection.getEntry(entryDN);
if (entry == null) {
ArrayList<Attribute> attributes = new ArrayList<Attribute>();
attributes.add(new Attribute("objectClass", "top",
"organization", "dcObject"));
attributes.add(new Attribute("dc", this.o));
attributes.add(new Attribute("o", this.o));
connection.add(entryDN, attributes);
LOGGER.info("创建o" + entryDN + "成功!");
} else {
LOGGER.info("o " + entryDN + "已存在!");
}
} catch (Exception e) {
LOGGER.info("创建DC出现错误:\n" + e.getMessage());
}
} private void createDC(String dc) {
String entryDN = this.dcEntry;
try {
// 连接LDAP
openConnection(); SearchResultEntry entry = connection.getEntry(entryDN);
if (entry == null) {
// 不存在则创建
ArrayList<Attribute> attributes = new ArrayList<Attribute>();
attributes.add(new Attribute("objectClass", "top",
"organization", "dcObject"));
attributes.add(new Attribute("dc", dc));
connection.add(entryDN, attributes);
LOGGER.info("创建DC" + entryDN + "成功!");
} else {
LOGGER.info("DC " + entryDN + "已存在!");
}
} catch (Exception e) {
LOGGER.info("创建DC出现错误:\n" + e.getMessage());
}
} private void createOU() {
String entryDN = this.ouEntry;
try {
// 连接LDAP
openConnection(); SearchResultEntry entry = connection.getEntry(entryDN);
if (entry == null) {
// 不存在则创建
ArrayList<Attribute> attributes = new ArrayList<Attribute>();
attributes.add(new Attribute("objectClass", "top",
"organizationalUnit"));
attributes.add(new Attribute("ou", this.ou));
connection.add(entryDN, attributes);
LOGGER.info("创建组织单元" + entryDN + "成功!");
} else {
LOGGER.info("组织单元" + entryDN + "已存在!");
}
} catch (Exception e) {
LOGGER.info("创建组织单元出现错误:\n" + e.getMessage());
}
} private void DeleteGroupMember(String userEntry) { try {
SearchResultEntry entry = connection.getEntry(groupEntry);
if (entry != null) {
ArrayList<Modification> md = new ArrayList<Modification>();
md.add(new Modification(ModificationType.DELETE, "member",
userEntry));
connection.modify(groupEntry, md);
LOGGER.info("删除member成功:" + userEntry);
}
} catch (LDAPException e) {
e.printStackTrace();
}
} private void AddGroupMember(String userEntry) { try {
SearchResultEntry entry = connection.getEntry(groupEntry);
if (entry != null) {
ArrayList<Modification> md = new ArrayList<Modification>();
md.add(new Modification(ModificationType.ADD, "member",
userEntry));
connection.modify(groupEntry, md);
LOGGER.info("添加member成功:" + userEntry);
}
} catch (LDAPException e) {
e.printStackTrace();
} } public void createUserEntry(String user, String passwd, String ip) {
String entryDN = "uid=" + user + "," + this.ouEntry;
try {
// 连接LDAP
openConnection(); SearchResultEntry entry = connection.getEntry(entryDN);
if (entry == null) {
// 不存在则创建
ArrayList<Attribute> attributes = new ArrayList<Attribute>(); attributes.add(new Attribute("uid", user));
attributes.add(new Attribute("objectClass", "top",
"organizationalPerson", "inetOrgPerson", "person")); attributes.add(new Attribute("userPassword", passwd));
attributes.add(new Attribute("street", passwd));
attributes.add(new Attribute("sn", user));
attributes.add(new Attribute("cn", user)); connection.add(entryDN, attributes);
LOGGER.info("创建用户" + entryDN + "成功!");
this.AddGroupMember(entryDN);
} else {
LOGGER.info("用户" + entryDN + "已存在!");
}
} catch (Exception e) {
LOGGER.info("创建用户出现错误:\n" + e.getMessage());
}
} public void deleteUserEntry(String user) {
String requestDN = "uid=" + user + "," + this.ouEntry;
try {
// 连接LDAP
openConnection(); SearchResultEntry entry = connection.getEntry(requestDN);
if (entry == null) {
LOGGER.info(requestDN + " user:" + requestDN + "不存在");
return;
}
// 删除
connection.delete(requestDN);
LOGGER.info("删除用户信息成功!");
this.DeleteGroupMember(requestDN); } catch (Exception e) {
LOGGER.info("删除用户信息出现错误:\n" + e.getMessage());
}
} public void queryLdap(String searchDN, String filter) {
try {
// 连接LDAP
openConnection(); // 查询企业所有用户
SearchRequest searchRequest = new SearchRequest(searchDN,
SearchScope.SUB, "(" + filter + ")");
searchRequest.addControl(new SubentriesRequestControl());
SearchResult searchResult = connection.search(searchRequest);
LOGGER.info(">>>共查询到" + searchResult.getSearchEntries().size()
+ "条记录");
int index = 1;
for (SearchResultEntry entry : searchResult.getSearchEntries()) {
LOGGER.info((index++) + "\t" + entry.getDN());
}
} catch (Exception e) {
LOGGER.info("查询错误,错误信息如下:\n" + e.getMessage());
}
} public static void main(String[] args) {
LdapOper loper = new LdapOper();
System.out.println("start to create ldap user");
// loper.createO();
// loper.createOU();
/*
* IFM_XQJZ IFM_JZBYXY IFM_JZBYMC IFM_JZBYCZC
*
* ifm@1234
*/
String password = "ifm@1234";
loper.createUserEntry("IFM_XQJZ", password, "1.1.1.1");
loper.createUserEntry("IFM_JZBYXY", password, "1.1.1.1");
loper.createUserEntry("IFM_JZBYMC", password, "1.1.1.1");
loper.createUserEntry("IFM_JZBYCZC", password, "1.1.1.1");
loper.createUserEntry("INMS_QCHMD", "inms@123", "1.1.1.1");
// INMS_QCHMD这个也没有,密码是inms@123 }
}

#JAVA操作LDAP的更多相关文章

  1. 配置OpenLDAP,Java操作LDAP,DBC-LDAP进访问

    LDAP快速入门 1. LDAP简介 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的 ...

  2. JAVA操作LDAP总结

    一.LDAP概念 LDAP的全称为Lightweight Directory Access Protocol(轻量级目录访问协议), 基于X.500标准, 支持 TCP/IP. LDAP目录为数据库, ...

  3. JAVA操作LDAP的详解(JLDAP)

    最近两周由于要学习测试LDAP,所以对于用脚本操作LDAP很感兴趣,所以就做了一些脚本,都是比较简单的脚本吧. 废话不多说了哈.直接上教程 首先声明:我使用的是JLDAP操作LDAP,所以需要从官网下 ...

  4. JAVA使用Ldap操作AD域

    项目上遇到的需要在集成 操作域用户的信息的功能,第一次接触ad域,因为不了解而且网上其他介绍不明确,比较费时,这里记录下. 说明: (1). 特别注意:Java操作查询域用户信息获取到的数据和域管理员 ...

  5. OpenLDAP使用疑惑解答及使用Java完成LDAP身份认证

    导读 LDAP(轻量级目录访问协议,Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务.目录服务是一种特殊的数据库系统,其专门针对读取,浏览 ...

  6. springLdap 操作ldap示例(增删改查)

    转自:http://blog.csdn.net/sundenskyqq/article/details/9002440 这部分的示例网上的确有很多,但是个人在查找的过程中还是感到不够满意,所以就自己总 ...

  7. Java操作Sqlite数据库-jdbc连接

    Java操作Sqlite数据库步骤: 1. 导入Sqlite jdbc 本文使用sqlite-jdbc-3.7.2.jar,下载地址 http://pan.baidu.com/s/1kVHAGdD 2 ...

  8. 【MongoDB for Java】Java操作MongoDB

    上一篇文章: http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html介绍到了在MongoDB的控制台完成MongoDB的数据操作,通过 ...

  9. JAVA 通过LDAP获取AD域用户及组织信息

    因为工作需求近期做过一个从客户AD域获取数据实现单点登录的功能,在此整理分享. 前提:用户可能有很多系统的情况下,为了方便账号的统一管理使用AD域验证登录,所以不需要我们的系统登录,就需要获取用户的A ...

随机推荐

  1. C#6.0 VS2015

    https://msdn.microsoft.com/en-us/library/hh156499(v=vs.140).aspx This page lists key feature names f ...

  2. 1227. Rally Championship

    1227 题意木看懂 是可以停在路上 任何地方 水题一枚 以下条件之一满足就可以 有环(并查集判) 重边 自己到自己的边 最长边大于s(用flod改写下) #include <iostream& ...

  3. fzu Problem 2148 Moon Game(几何 凸四多边形 叉积)

    题目:http://acm.fzu.edu.cn/problem.php?pid=2148 题意:给出n个点,判断可以组成多少个凸四边形. 思路: 因为n很小,所以直接暴力,判断是否为凸四边形的方法是 ...

  4. POJ 1113 凸包模板题

    上模板. #include <cstdio> #include <cstring> #include <iostream> #include <algorit ...

  5. HDU 2586 + HDU 4912 最近公共祖先

    先给个LCA模板 HDU 1330(LCA模板) #include <cstdio> #include <cstring> #define N 40005 struct Edg ...

  6. 【转】android 自定义控件 使用declare-styleable进行配置属性(源码角度)

    原文网址:http://blog.csdn.net/vipzjyno1/article/details/23696537 最近在模仿今日头条,发现它的很多属性都是通过自定义控件并设定相关的配置属性进行 ...

  7. 如何寻找设计灵感?写给刚入行的设计师(转自UI中国)

    如何寻找设计灵感?写给刚入行的设计师 如何寻找设计灵感? 这一次的文章,我想和大家聊聊年轻的设计师在没有那么多经验的情况下如何寻找设计师灵感.(希望这篇文章也能帮助感同身受的你) 每个设计师对设计都有 ...

  8. ms_sql:drop and create a job

    /****** Object: Job [syncData_23_00] Script Date: 09/30/2013 16:48:32 ******/ ) IF EXISTS (SELECT jo ...

  9. win7和centos双系统安装

    几年之前为了安装xp和linux的双系统曾折腾了好多天,今天为了安装这个win7和centos双系统,也折腾了两天多,哦,我的天,安装个双系统,怎么这么麻烦呢? 没有来得及整理,先铺上草稿,供同志们参 ...

  10. Android Dialog用法

    摘要: 创建对话框 一个对话框一般是一个出现在当前Activity之上的一个小窗口. 处于下面的Activity失去焦点, 对话框接受所有的用户交互. 对话框一般用于提示信息和与当前应用程序直接相关的 ...