#JAVA操作LDAP
2015-06-02 22:30
423 查看
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 连接、操控数据库总结(JDBC)
- HDU1850 Being a Good Boy in Spring Festival
- Java系统变量设置方式
- struts2快速入门
- [Android Studio系列(一)] eclipse项目导入Android Studio的2种方法
- 【Struts0002】Difference between # , $ and % signs in Struts2
- ubuntu下 Sublime Text 3配置基本Java环境
- JAVA堆算法,基于数组实现
- 基于java的双向链表实现方法
- Eclipse NDK 配置
- java多线程的实现和比较
- Extjs+Struts学习资料
- java学习之其他对象API
- 【Struts2】If, Else, ElseIf Conditional/Control tag example in Struts 2
- Java中的wait、notify、notifyall方法
- Spring框架之自动装配
- java中compareTo和compare方法之比较
- 理解Java ClassLoader机制(转载)
- java装饰模式和适配器模式区别
- Eclipse 创建 Maven 项目、Maven JavaWeb 项目