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. openfire中mysql的前期设置

    使用openfire的时候如果需要使用自己的mysql数据库,需要提前进行设置,下面将记录下,基本的设置过程. 一.前期准备工作: 1.先下载两个工具一个是mysql数据库还有一个是SQLyog(可以 ...

  2. Json转译

    public string ListToJson<T>(IList<T> list, string jsonName) { StringBuilder Json = new S ...

  3. UVa 11732 (Tire树) "strcmp()" Anyone?

    这道题也是卡了挺久的. 给出一个字符串比较的算法,有n个字符串两两比较一次,问一共会有多少次比较. 因为节点会很多,所以Tire树采用了左儿子右兄弟的表示法来节省空间. 假设两个不相等的字符串的最长公 ...

  4. UVa 12186 Another Crisis

    题意: 给出一个树状关系图,公司里只有一个老板编号为0,其他人员从1开始编号.除了老板,每个人都有一个直接上司,没有下属的员工成为工人. 工人们想写一份加工资的请愿书,只有当不少于员工的所有下属的T% ...

  5. LA 3266 (贪心) Tian Ji -- The Horse Racing

    题意: 田忌和齐王各有n匹马,如果马的速度比齐王的快就赢200,慢则输200,相等不赔不赚. 已知两人每匹马的速度(为整数)和齐王所排出的马的顺序,问田忌该如何应对才能使收益最大. 分析: 本以为是一 ...

  6. BZOJ3858: Number Transformation

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3858 题解:设第i个数为i*a;第i+1个数为(i+1)*b.则(i+1)*b>i*a; ...

  7. 五大主流SQL数据库

    一. 开放性 1. SQL Server 只能在windows上运行,没有丝毫的开放性,操作系统的系统的稳定对数据库是十分重要的.Windows9X系列产品是偏重于桌面应用,NT server只适合中 ...

  8. RPi 2B Raspbian system install

    /***************************************************************************** * RPi 2B Raspbian系统安装 ...

  9. vc/mfc获取rgb图像数据后动态显示及保存图片的方法

    vc/mfc获取rgb图像数据后动态显示及保存图片的方法 该情况可用于视频通信中获取的位图数据回放显示或显示摄像头捕获的本地图像 第一种方法 #include<vfw.h> 加载 vfw3 ...

  10. jquery实现点击按钮滑动到指定位置

    <body> <script type="text/javascript"> function click_scroll() { var scroll_of ...