亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

封裝JNDI操作LDAP服務器的工具類(3)

2019-11-18 12:24:19
字體:
來源:轉載
供稿:網友

  目標:使用者只需要會使用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),或向我要代碼.

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
一区二区中文字幕| 一本大道亚洲视频| 91精品国产电影| 国产精品男人的天堂| 亚洲成人网av| 久久久久国色av免费观看性色| 日韩视频中文字幕| 51ⅴ精品国产91久久久久久| 精品免费在线观看| 国产精品jvid在线观看蜜臀| 不卡av在线播放| 97精品欧美一区二区三区| 亚洲丝袜在线视频| 欧美另类精品xxxx孕妇| 性欧美亚洲xxxx乳在线观看| 亚洲色图色老头| 国产一区香蕉久久| 欧美性生交xxxxxdddd| 亚洲精品电影网| 久久久久久久久久国产精品| 日韩一区二区三区xxxx| 欧美裸体xxxx| 色久欧美在线视频观看| 精品香蕉一区二区三区| 亚洲激情在线视频| 97av在线视频免费播放| 久久精品久久久久久国产 免费| 91高清视频免费| 欧美性做爰毛片| 97国产精品视频| 日韩成人在线电影网| 一区二区三区国产在线观看| 欧美性在线观看| 国产精品网站视频| 日韩精品在线观看视频| 国产精品天天狠天天看| 欧美电影免费观看高清完整| 亚洲午夜精品久久久久久久久久久久| 国产综合视频在线观看| 亚洲网站在线看| 亚洲国产一区二区三区四区| 日韩av在线高清| 欧美在线视频免费| 日韩精品免费在线播放| 亚洲精品电影网在线观看| 精品国产一区二区三区久久| 免费99精品国产自在在线| 在线精品视频视频中文字幕| 国产精品嫩草影院一区二区| 亚洲大胆人体视频| 久久久久免费精品国产| 日韩av免费在线| 国产精品久久久久免费a∨大胸| 日韩在线观看免费高清完整版| 日韩电视剧免费观看网站| 亚洲日韩中文字幕| 九九视频这里只有精品| 久久这里只有精品视频首页| www亚洲精品| 精品国产福利在线| 国产精品福利在线| 久久久久日韩精品久久久男男| 国产中文欧美精品| 亚洲日本中文字幕免费在线不卡| 久久精品99久久久香蕉| 国模精品一区二区三区色天香| 欧美极品美女电影一区| 欧美猛男性生活免费| 不卡av电影院| 欧美性猛交丰臀xxxxx网站| 国精产品一区一区三区有限在线| 日韩中文字幕av| 中文字幕一区二区三区电影| 91精品国产综合久久久久久蜜臀| 美女国内精品自产拍在线播放| 日韩电影中文字幕一区| 黑人精品xxx一区一二区| 欧美日韩亚洲视频一区| 亚洲成人国产精品| 亚洲www在线| 亚洲精品免费在线视频| 国产午夜一区二区| 国产欧美va欧美va香蕉在| 91香蕉亚洲精品| 在线成人激情视频| 国产福利精品在线| 成人免费视频xnxx.com| 欧美国产日韩免费| 欧美日在线观看| 国产精品久久精品| 亚洲3p在线观看| 国产成人精品日本亚洲| 成人午夜高潮视频| 成人黄色短视频在线观看| 97视频在线观看免费| 97涩涩爰在线观看亚洲| 伊人精品在线观看| 精品成人乱色一区二区| 91国产一区在线| 亚洲毛茸茸少妇高潮呻吟| 成人444kkkk在线观看| 日本伊人精品一区二区三区介绍| 疯狂做受xxxx高潮欧美日本| 日韩中文在线不卡| 亚洲第一区第二区| 九色精品美女在线| 97在线免费观看视频| 久久久久久91香蕉国产| 国内精品久久久久久影视8| 亚洲成成品网站| 久久精品色欧美aⅴ一区二区| 亚洲缚视频在线观看| 亚洲国产欧美一区二区丝袜黑人| 国产免费一区二区三区在线能观看| 亚洲毛茸茸少妇高潮呻吟| 欧美国产日韩一区| 综合av色偷偷网| 欧美限制级电影在线观看| 久久久久久尹人网香蕉| 欧美做受高潮电影o| 国语自产精品视频在线看抢先版图片| 久久精品国产亚洲一区二区| 欧美日韩第一视频| 亚洲成人999| 国产精品成人一区二区三区吃奶| 视频一区视频二区国产精品| 国产日韩一区在线| 精品国偷自产在线视频99| 欧美一级高清免费播放| 精品欧美国产一区二区三区| 国产精品旅馆在线| 亚洲乱码国产乱码精品精天堂| 日韩精品免费电影| 亚洲精品99久久久久中文字幕| 久久男人资源视频| 俺去啦;欧美日韩| 亚洲sss综合天堂久久| 有码中文亚洲精品| 国产精品日本精品| 亚洲女人初尝黑人巨大| 免费97视频在线精品国自产拍| 欧美老少做受xxxx高潮| 欧美日韩在线观看视频小说| 欧美自拍大量在线观看| 欧美电影第一页| 国产偷亚洲偷欧美偷精品| 国产亚洲欧美aaaa| 国产成人精品一区二区三区| 亚洲国产另类 国产精品国产免费| 久久伊人精品一区二区三区| 欧美成人性色生活仑片| 国产欧美精品久久久| 亚洲欧美一区二区三区久久| 精品久久在线播放| 福利视频导航一区| 欧美激情三级免费| 69av在线播放| 国产免费一区二区三区在线能观看| 亚洲韩国日本中文字幕| 国产视频精品免费播放| 欧美成人亚洲成人日韩成人| 日韩美女视频中文字幕| 国产中文日韩欧美| 亚洲欧美制服第一页|