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. Android权限安全(8)ContentProvider基于URI的安全

    一.provider可以通过binder得到客户的uid,然后进程权限检查. 二,provider临时权限 场景:  Email的内容在provider中提供,Email的客户端可读基其内容,现在一封 ...

  2. Android中常见的MVC模式

    MVC模式的简要介绍 MVC是三个单词的缩写,分别为: 模型(Model),视图(View)和控制Controller). MVC模式的目的就是实现Web系统的职能分工. Model层实现系统中的业务 ...

  3. java开发之关键字

    abstract //抽象方法,抽象类的修饰符assert //断言条件是否满足boolean //布尔数据类型break //跳出循环或者label代码段byte //8-bit 有符号数据类型ca ...

  4. freemarker判断记录集是不是为空

    #if($personals)这样写 直接把记录标识符放在if里面就可以了

  5. 一位ACM过来人的心得(转)

    励志下! 刻苦的训练我打算最后稍微提一下.主要说后者:什么是有效地训练? 我想说下我的理解.很多ACMer入门的时候,都被告知:要多做题,做个500多道就变牛了.其实,这既不是充分条件.也不会是必要条 ...

  6. 函数lock_rec_set_nth_bit

    lock 分配内存 lock = mem_heap_alloc(trx->lock_heap, sizeof(lock_t) + n_bytes); 内存分配图 0xxx 2 xxx 0xxx3 ...

  7. if(username.equals(“zxx”){}

    1. if(username.equals(“zxx”){} username可能为NULL,会报空指针错误:改为"zxx".equals(username) 2.  int  x ...

  8. bzoj2584

    这是bzoj上AC的第700题,一定要是一道神题!!! 当初分组赛的时候讲过拖到现在才写…… 我们考虑把垂直方向移动和水平方向移动分开来考虑,不合法的轮数取二者最小 假设考虑的是垂直方向移动,障碍其实 ...

  9. bzoj1594

    首先想到二分答案 然后我们从大往小加区间,如果之前出现了一个区间包含当前区间 那显然不合法,我们可以用并查集了维护 type node=record x,y,mi,id:longint; end; . ...

  10. WinDbg调试命令汇总

    一. 1. !address eax 查看对应内存页的属性 2. vertarget 显示当前进程的大致信息 3 !peb 显示process Environment Block 4. lmvm 可以 ...