科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件封装JNDI操作LDAP服务器的工具类(3)

封装JNDI操作LDAP服务器的工具类(3)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

目标:使用者只需要会使用List,Map 数据结构,将对LDAP的操作进行封装   类:主要有三个类

作者:中国IT实验室 来源:中国IT实验室 2007年8月31日

关键字: JNDI LDAP

  • 评论
  • 分享微博
  • 分享邮件
目标:使用者只需要会使用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),或向我要代码.

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章