this is a extra element for clear the floated element
封装JNDI操作LDAP服务器的工具类(3)
  • 12/31
  • 2008
J2ee核心 | Java 2010 次查看
  目标:使用者只需要会使用List,Map 数据结构,将对LDAP的操作进行封装

  类:主要有三个类

  1 Env类 包含LDAP的连接信息

  2 LdapConnectionFactory类 ldap连接工厂,提供初始化及获取ldap连接的方法

  3 LdapOperUtils ldap的处理工具类,提供了各种操作ldap的方法。

  ldap的处理工具类,提供了各种操作ldap的方法。

  package com.common.ldapconnection;

  import java.util.List;

  import java.util.Vector;

  /**

  *

  * <p>功能描述:ldap的处理类,提供了各种操作ldap的方法。</p>

  * @author liaowufeng

  * @version 1.0

  */

  public class LdapOperUtils {

  // 调用log4j的日志,用于输出

  private static Logger log = Logger.getLogger(LdapOperUtils.class.getName());

  /**

  * 根据连接Env信息,取得Ldap DirContext

  * @param env 连接Env的连接信息

  * @return Ldap连接的DirContext

  * @throws BaseException

  */

  private static DirContext getLdapDirContext(Env env) throws BaseException {

  // 参数为空

  if (env == null) {

  String[] args = {

  "env"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter env NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 定义DirContext

  DirContext dirContext = null;

  // 从Ldap连接工厂中,取得Ldap连接

  dirContext = LdapConnectionFactory.getDirContext(env);

  return dirContext;

  }

  /**

  * 根据在ldappool.properties文件定义的Ldap DirContext池名,取得Ldap DirContext

  * @param dirContextName Ldap DirContext池名

  * @return 返回操作Ldap 的 DirContext

  * @throws BaseException

  */

  private static DirContext getLdapDirContext(String dirContextName,Env env)

  throws BaseException {

  // 参数为空

  if (StringUtils.isEmpty(dirContextName)) {

  String[] args = {

  "dirContextName"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter dirContextName NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 定义DirContext

  DirContext dirContext = null;

  // 从Ldap连接工厂中,取得Ldap连接

  dirContext = LdapConnectionFactory.getDirContext(dirContextName,env);

  return dirContext;

  }

  /**

  * 关闭LDAP连接

  * @param dirContext DirContext

  * @throws BaseException

  */

  public static void closeEnvLdapDirContext(DirContext dirContext)

  throws BaseException {

  // 关闭LDAP连接

  closeLdapDirContext(dirContext);

  }

  /**

  * 关闭Ldap 的DirContext

  * @param dirContext 连接Ldap的DirContext

  * @throws BaseException

  */

  private static void closeLdapDirContext(DirContext dirContext) throws

  BaseException {

  // 如果参数为NULL

  if (dirContext == null) {

  String[] args = {

  "dirContext"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter conn NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  try {

  // 关闭

  dirContext.close();

  } catch (NamingException ex) {

  // 关闭不成功,再次关闭

  if (log.isDebugEnabled()) {

  log.debug("Not close DirContext " + ex);

  }

  // 记录日志

  log.error("Not close DirContext " + ex);

  ex.printStackTrace();

  try {

  //再次关闭

  dirContext.close();

  } catch (NamingException ex1) {

  // 再次关闭失败

  if (log.isDebugEnabled()) {

  log.debug("Not again close DirContext " + ex);

  }

  // 记录日志

  log.error("Not again close DirContext " + ex);

  ex.printStackTrace();

  // 抛出异常

  throw new BaseException("error.common.dao.ldap.closedircontext", null);

  }

  }

  }

  /**

  * 构造函数私有,防止实例化

  */

  private LdapOperUtils() {

  }

  /**

  * 在当前的Context 添加一个子Context

  * @param context 连接DirContext

  * @param cn 创建的子Context

  * @param attMap Context 的属性,Map 包含 List ,key = 属性名,

  * 当属性值为多值时,为list,为单值时,为String

  * @throws NamingException

  * @throws BaseException

  */

  public static void addContext(DirContext context, String cn, Map attMap) throws

  NamingException, BaseException {

  // 参数为空

  if (context == null) {

  String[] args = {

  "context"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter context NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (StringUtils.isEmpty(cn)) {

  String[] args = {

  "cn"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter cn NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (attMap == null) {

  String[] args = {

  "attMap"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter attMap NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 为空,则退出

  if (attMap.isEmpty()) {

  return;

  }

  // 取所有的属性key

  Set keySet = attMap.keySet();

  Iterator keyIterator = keySet.iterator();

  Attributes attrs = new BasicAttributes();

  // 迭代所有的属性key

  while (keyIterator.hasNext()) {

  // 取下一个属性

  String key = (String) keyIterator.next();

  Attribute att = null;

  Object valueObj = attMap.get(key);

  // 判断属性类型

  if (valueObj instanceof String) {

  // 为字符串,为单值属性

  att = new BasicAttribute(key, valueObj);

  } else if (valueObj instanceof List) {

  // 为List ,为多值属性

  att = new BasicAttribute(key);

  List valueList = (List) valueObj;

  // 加入多值属性

  for (int i = 0; i < valueList.size(); i++) {

  att.add(valueList.get(i));

  }

  } else {

  // 其它类型,都加入,如字节类型 (密码)

  att = new BasicAttribute(key,valueObj);

  }

  // 加入

  attrs.put(att);

  }

  // 创建子Context

  context.createSubcontext(cn, attrs);

  // context.close();

  }

  /**

  * 在当前的Context 删除一个子Context

  * @param context 连接的DirContext

  * @param cn

  要删除的Context的名称

  * @throws NamingException

  * @throws BaseException

  */

  public static void deleteContext(DirContext context, String cn) throws

  NamingException, BaseException {

  // 参数为空

  if (context == null) {

  String[] args = {

  "context"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter context NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (StringUtils.isEmpty(cn)) {

  String[] args = {

  "cn"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter cn NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 删除一个子Context

  context.destroySubcontext(cn);

  //

  context.close();

  }

  /**

  * 根据当前的连接DirContext 重命名Context

  * @param context 连接后的DirContext

  * @param cn

  原Context的名称

  * @param newCn 新的Context名称

  * @throws NamingException

  * @throws BaseException

  */

  public static void reNameContext(DirContext context, String cn,

  String newCn) throws NamingException,

  BaseException {

  // 参数为空

  if (context == null) {

  String[] args = {

  "context"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter context NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (StringUtils.isEmpty(cn)) {

  String[] args = {

  "cn"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter cn NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (context == null) {

  String[] args = {

  "context"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter context NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (StringUtils.isEmpty(newCn)) {

  String[] args = {

  "newCn"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter newCn NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  context.rename(cn, newCn);

  // context.close();

  }

  /**

  * 在当前连接的DirContext 指定的Context 添加一个 / 多个属性

  * @param context 连接的DirContext

  * @param cn

  指定的Context

  * @param attMap Map 包含 List ,key为属性名称,

  * value 属性值, 当为多值时,存为List,当为单值时,为String类型

  * @throws BaseException

  * @throws NamingException

  */

  public static void addAttributes(DirContext context, String cn, Map attMap) throws

  BaseException, NamingException {

  // 参数为空

  if (context == null) {

  String[] args = {

  "context"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter context NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (attMap == null) {

  String[] args = {

  "attMap"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter attMap NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (StringUtils.isEmpty(cn)) {

  String[] args = {

  "cn"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter cn NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 为空,退出

  if (attMap.isEmpty()) {

  return;

  }

  // 取所有的属性key

  Set keySet = attMap.keySet();

  Iterator keyIterator = keySet.iterator();

  Attributes attrs = new BasicAttributes();

  // 迭代所有的属性key

  while (keyIterator.hasNext()) {

  // 取下一个属性

  String key = (String) keyIterator.next();

  Attribute att = null;

  Object valueObj = attMap.get(key);

  // 判断属性类型

  if (valueObj instanceof String) {

  // 为字符串,为单值属性

  att = new BasicAttribute(key, valueObj);

  } else if (valueObj instanceof List) {

  // 为List ,为多值属性

  att = new BasicAttribute(key);

  List valueList = (List) valueObj;

  // 加入多值属性

  for (int i = 0; i < valueList.size(); i++) {

  att.add(valueList.get(i));

  }

  }

  // 加入

  attrs.put(att);

  }

  context.modifyAttributes(cn, DirContext.ADD_ATTRIBUTE, attrs);

  // context.close();

  }

  /**

  * 在当前的连接DirContext 删除 指定Context 下的 一个 / 多个属性

  * @param context 连接后的DirContext

  * @param cn 指定Context的名称

  * @param attList 包含要删除的属性的名称,为List类型

  * @throws BaseException

  * @throws NamingException

  */

  public static void deleteAttributes(DirContext context, String cn,

  List attList) throws BaseException,

  NamingException {

  // 参数为空

  if (context == null) {

  String[] args = {

  "context"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter context NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (attList == null) {

  String[] args = {

  "attList"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter attList NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 参数为空

  if (StringUtils.isEmpty(cn)) {

  String[] args = {

  "cn"};

  // 打印错误日志

  StringBuffer msglog = new StringBuffer(

  "empty invoke parameter cn NULL ");

  log.error(msglog.toString());

  throw new BaseException("error.common.parameter.empty", args);

  }

  // 为空,退出

  if (attList.isEmpty()) {

  return;

  }

  Attributes attrs = new BasicAttributes();

  for (int i = 0; i < attList.size(); i++) {

  Attribute att = null;

  att = new BasicAttribute((String) attList.get(i));

  // 加入

  attrs.put(att);

  }

  context.modifyAttributes(cn, DirContext.REMOVE_ATTRIBUTE, attrs);

  // context.close();

  }

  }

  由于类 LdapOperUtils 太长,JR限制,其它方法见我的下一篇文章

  封装JNDI操作LDAP服务器的工具类(4),或向我要代码.