- 浏览: 343907 次
- 性别:
- 来自: 上海
-
文章分类
最新评论
-
yin_bp:
不建议使用session复制机制,推荐bboss会话共享框架, ...
JBOSS7 集群和Session复制配置笔记 -
heipacker:
建议:java(多线程)实现高性能数据同步==>java ...
java(多线程)实现高性能数据同步 -
yang_min:
582399232 写道你的脚本貌似不能用呀?service ...
JBOSS7学习笔记 -
yang_min:
582399232 写道感觉这个脚本不好#shutdown=' ...
JBOSS7学习笔记 -
yang_min:
582399232 写道博主能问几个问题吗?1.按照你的步骤执 ...
JBOSS7 集群和Session复制配置笔记
如何使用封装JNDI操作LDAP服务器的工具类
下面是一个例子
测试类的功能,向windows Active Directory 增加一个域用户 lwf2_count,并激活该帐户
/** * 在当前连接的DirContext 修改指定Context下的一个 或 多个属性 * @param context 连接的DirContext * @param cn 指定Context下的名字 * @param attMap 包含List key为属性名称,当属性为多值时 * value 为包含多值的List,为单值时,为包含单值的String类型 * @throws BaseException * @throws NamingException */ public static void modifyAttributes(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 List) { // 为List ,为多值属性 att = new BasicAttribute(key); List valueList = (List) valueObj; // 加入多值属性 for (int i = 0; i < valueList.size(); i++) { att.add(valueList.get(i)); } } else if (valueObj instanceof String) { att = new BasicAttribute(key, valueObj); } // 加入 attrs.put(att); } context.modifyAttributes(cn, DirContext.REPLACE_ATTRIBUTE, attrs); // context.close(); } // /** * 获取连接的DirContext中指定Context下的指定属性 * @param context 连接的DirContext * @param cn 指定Context的名称 * @param attNameList 要取的属性的名称List * @return Map包含List ,key 为属性的名称,当属性值为多值时,Value为List类型, * 否则,value 为String 类型 * @throws NamingException */ public static Map getAttributes(DirContext context, String cn, List attNameList) throws NamingException { Map attsMap = new HashMap(); Attributes results = null; List attValList = null; String attrId = null; if (attNameList == null) { results = context.getAttributes(cn); } else { if (!attNameList.isEmpty()) { // results = context.getAttributes(cn); String[] stTemp = new String[attNameList.size()]; /////////////////////////////////////////// 以下方法性能太低 //////////////////////////////// // for (int i = 0; i < attNameList.size(); i++) { // stTemp[i] = (String) attNameList.get(i); // } // results = context.getAttributes(cn, // stTemp); /////////////////////////////////////////////////////////////////////////////////////////// // 比较高性能的List 转为 数组的方法 results = context.getAttributes(cn, (String[]) (attNameList.toArray(stTemp))); } } for (int i = 0; i < attNameList.size(); i++) { Attribute attr = results.get((String) attNameList.get(i)); attrId = (String) attNameList.get(i); if (attr != null) { if (attr.size() > 0) { NamingEnumeration vals = attr.getAll(); if (vals == null) { continue; } Object obj1 = vals.nextElement(); if (obj1 == null) { continue; } // 迭代这个属性的所有属性值 while (vals.hasMoreElements()) { if (attValList == null) { attValList = new ArrayList(); attValList.add(obj1); } attValList.add(vals.nextElement()); } // 当属性为单值域时,存为字符串 // 当属性为多值域时,存为包含多值域的List if (attValList != null) { attsMap.put(attrId, attValList); // 清空 attValList = null; } else { attsMap.put(attrId, obj1); } } } } // context.close(); return attsMap; } /** * 在当前连接的DirContext 获取指定Context下的指定属性名称的所有属性值(一个或多个值) * @param context 连接的DirContext * @param cn 指定Context的cn名 * @param attName 属性名称 * @return 返回包括属性值的List 注意,当属性只有一个值时,返回的List长度为1,当属性 * 是多值属性时,返回List长度为属性值的数目 * @throws NamingException */ public static List getAttributeValues(DirContext context, String cn, String attName) throws NamingException { List attValList = new ArrayList(); List attNameList = new ArrayList(); attNameList.add(attName); Map attMap = null; attMap = getAttributes(context, cn, attNameList); if (attMap != null) { Object attValObj = attMap.get(attName); if (attValObj instanceof String) { attValList.add((String) attValObj); } else if (attValObj instanceof List) { attValList = ((List) attValObj); } } // context.close(); return attValList; } /** * 获取角色的相关信息 * @param context DirContext * @param cn String * @param attName String * @return String * @throws NamingException */ public static String getRoleAttributeValues(DirContext context, String cn, String attName) throws NamingException { String result = ""; List attNameList = new ArrayList(); attNameList.add(attName); Map attMap = null; attMap = getAttributes(context, cn, attNameList); if (attMap != null) { Object attValObj = attMap.get(attName); result = (String)attValObj; } return result; } /** * 根据条件查找指定CN的Context下的一层所有属性 * @param context 连接了的DirContext * @param cn 要查询的BaseCN名称 * @param filter 要查询的过滤字符串 * @return 符合查询结果的List * @throws NamingException */ public static List searchContextOne(DirContext context, String cn, String filter) throws NamingException { List resultList = new ArrayList(); Map resultRowMap = null; List attValList = null; String attValStr = null; // 实例化一个搜索器 SearchControls constraints = new SearchControls(); // 设置搜索器的搜索范围 constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE); // 在基目录中搜索条件为Env.MY_FILTER的所有属性 注意:这里返回是的所有的条目集合 NamingEnumeration results = context.search(cn, filter, constraints); // 打印条目的识别名(DN)及其所有的属性名,值 while (results != null && results.hasMore()) { // 取一个条目 SearchResult si = (SearchResult) results.next(); // 获取条目的所有属性集合 Attributes attrs = si.getAttributes(); if (attrs != null) { String attrId = null; // 一行数据 resultRowMap = new HashMap(); // 打印所有属性 for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements(); ) { // 获取一个属性 Attribute attr = (Attribute) ae.next(); attrId = attr.getID(); Enumeration vals = attr.getAll(); if (vals == null) { continue; } Object obj1 = vals.nextElement(); if (obj1 == null) { continue; } // 迭代这个属性的所有属性值 while (vals.hasMoreElements()) { if (attValList == null) { attValList = new ArrayList(); attValList.add(obj1); } attValList.add(vals.nextElement()); } // 当属性为单值域时,存为字符串 // 当属性为多值域时,存为包含多值域的List if (attValList != null) { resultRowMap.put(attrId, attValList); // 清空 attValList = null; } else { resultRowMap.put(attrId, obj1); } } } resultList.add(resultRowMap); } return resultList; } /** * 根所条件查找指定CN的Context下的子树下的所有属性 * @param context 连接了的DirContext * @param cn 要查询的BaseCN名称 * @param filter 要查询的过滤字符串 * @return 符合查询结果的List * @throws NamingException */ public static List searchContextSub(DirContext context, String cn, String filter) throws NamingException { List resultList = new ArrayList(); Map resultRowMap = null; List attValList = null; // 实例化一个搜索器 SearchControls constraints = new SearchControls(); // 设置搜索器的搜索范围 constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); // 在基目录中搜索条件为Env.MY_FILTER的所有属性 注意:这里返回是的所有的条目集合 NamingEnumeration results = context.search(cn, filter, constraints); // 打印条目的识别名(DN)及其所有的属性名,值 while (results != null && results.hasMore()) { // 取一个条目 SearchResult si = (SearchResult) results.next(); // 获取条目的所有属性集合 Attributes attrs = si.getAttributes(); if (attrs != null) { String attrId = null; // 一行数据 resultRowMap = new HashMap(); // 打印所有属性值 for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements(); ) { // 获取一个属性 Attribute attr = (Attribute) ae.next(); attrId = attr.getID(); Enumeration vals = attr.getAll(); if (vals == null) { continue; } Object obj1 = vals.nextElement(); if (obj1 == null) { continue; } // 迭代这个属性的所有属性值 while (vals.hasMoreElements()) { if (attValList == null) { attValList = new ArrayList(); attValList.add(obj1); } attValList.add(vals.nextElement()); } // 当属性为单值域时,存为字符串 // 当属性为多值域时,存为包含多值域的List if (attValList != null) { resultRowMap.put(attrId, attValList); // 清空 attValList = null; } else { resultRowMap.put(attrId, obj1); } } } resultList.add(resultRowMap); } return resultList; } /** * 查找指定CN的Context下的子树下的指定属性 * @param context DirContext * @param cn String * @param filter String * @param returnedAtts String[] 属性名字数组 * @return List * @throws NamingException */ public static List searchContextSub(DirContext context, String cn, String filter, String[] returnedAtts) throws NamingException { List resultList = new ArrayList(); String attrId = null; List attValList = null; Map resultRowMap = null; // 实例化一个搜索器 SearchControls constraints = new SearchControls(); // 设置搜索器的搜索范围 constraints.setSearchScope(SearchControls.SUBTREE_SCOPE); // String[] returnedAtts = {"uniquemember"}; constraints.setReturningAttributes(returnedAtts); // 条目 NamingEnumeration results = context.search(cn, filter, constraints); // 迭代所有的条目 while (results != null && results.hasMore()) { // 取一个条目 SearchResult si = (SearchResult) results.next(); resultRowMap = new HashMap(); // 获取条目的指定返回的属性 Attributes attrs = si.getAttributes(); if (attrs != null) { // 迭代所有属性值 for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements(); ) { // 获取一个属性 Attribute attr = (Attribute) ae.next(); attrId = attr.getID(); Enumeration vals = attr.getAll(); if (vals == null) { continue; } // 迭代这个属性的所有属性值 while (vals.hasMoreElements()) { if (attValList == null) { attValList = new ArrayList(); } attValList.add(vals.nextElement()); } // 当属性为单值域时,存为字符串 // 当属性为多值域时,存为包含多值域的List if (attValList != null) { resultRowMap.put(attrId, attValList); // 清空 attValList = null; } } } resultList.add(resultRowMap); } return resultList; } /** * 查找指定CN的Context下的一层指定属性 * @param context DirContext * @param cn String * @param filter String * @param returnedAtts String[] 属性名字数组 * @return List * @throws NamingException */ public static List searchContextOne(DirContext context, String cn, String filter, String[] returnedAtts) throws NamingException { List resultList = new ArrayList(); String attrId = null; List attValList = null; Map resultRowMap = null; // 实例化一个搜索器 SearchControls constraints = new SearchControls(); // 设置搜索器的搜索范围 constraints.setSearchScope(SearchControls.ONELEVEL_SCOPE); // String[] returnedAtts = {"uniquemember"}; constraints.setReturningAttributes(returnedAtts); // 条目 NamingEnumeration results = context.search(cn, filter, constraints); // 迭代所有的条目 while (results != null && results.hasMore()) { // 取一个条目 SearchResult si = (SearchResult) results.next(); resultRowMap = new HashMap(); // 获取条目的指定返回的属性 Attributes attrs = si.getAttributes(); if (attrs != null) { // 迭代所有属性值 for (NamingEnumeration ae = attrs.getAll(); ae.hasMoreElements(); ) { // 获取一个属性 Attribute attr = (Attribute) ae.next(); attrId = attr.getID(); Enumeration vals = attr.getAll(); if (vals == null) { continue; } Object obj1 = vals.nextElement(); if (obj1 == null) { continue; } // 迭代这个属性的所有属性值 while (vals.hasMoreElements()) { if (attValList == null) { attValList = new ArrayList(); attValList.add(obj1); } attValList.add(vals.nextElement()); } // 当属性为单值域时,存为字符串 // 当属性为多值域时,存为包含多值域的List if (attValList != null) { resultRowMap.put(attrId, attValList); // 清空 attValList = null; } else { resultRowMap.put(attrId, obj1); } } } resultList.add(resultRowMap); } return resultList; } /** * 在当前的连接DirContext 删除 指定Context 下的 一个属性里面包含的子属性 * @param context 连接后的DirContext * @param cn 指定Context的名称 * @param attList 包含要删除的属性的名称 * @throws BaseException * @throws NamingException */ public static void deleteInAttributes(DirContext ctx, String userDN, List attList,String flag) throws NamingException { if (attList == null || attList.size() == 0) { return; } else { int size = attList.size(); ModificationItem[] mods = new ModificationItem[size]; for (int i = 0; i < size; i++) { Attribute att = null; mods[i] = new ModificationItem(DirContext.REMOVE_ATTRIBUTE, new BasicAttribute( flag, (String) attList.get(i))); } ctx.modifyAttributes(userDN, mods); } } /** * 创建一个连接,通过捕捉Exception来确定该用户是否存在于目标ldap中 * @param configDto ConfigDto * @param uid String * @param password char[] * @return boolean * @throws NamingException */ public static boolean authenticate(ConfigDto configDto, String uid, char[] password) throws NamingException { Hashtable mEnvironment = new Hashtable(); DirContext mContext = null; //创建连接 mEnvironment.put(Context.INITIAL_CONTEXT_FACTORY, configDto.getEnvfactory()); mEnvironment.put(Context.PROVIDER_URL, configDto.getEnvurl()); mEnvironment.put(Context.SECURITY_AUTHENTICATION, "simple"); mEnvironment.put(Context.SECURITY_PRINCIPAL, Constants.LDAP_PEOPLE_ATTRIBUTE_UID + "=" + uid + "," + configDto.getEnvPeopleLoc()); mEnvironment.put(Context.SECURITY_CREDENTIALS, password); try { mContext = new InitialDirContext(mEnvironment); log.debug("user:"+uid+" login!"); return true; } catch (AuthenticationException ex) { log.error("user:"+uid+" don't login because of wrong user name or password!"); return false; } }
相关推荐
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
前端分析-2023071100789
基于kinect的3D人体建模C++完整代码.cpp
搞机工具箱10.1.0.7z
GRU+informer时间序列预测(Python完整源码和数据),python代码,pytorch架构,适合各种时间序列直接预测。 适合小白,注释清楚,都能看懂。功能如下: 代码基于数据集划分为训练集测试集。 1.多变量输入,单变量输出/可改多输出 2.多时间步预测,单时间步预测 3.评价指标:R方 RMSE MAE MAPE,对比图 4.数据从excel/csv文件中读取,直接替换即可。 5.结果保存到文本中,可以后续处理。 代码带数据,注释清晰,直接一键运行即可,适合新手小白。
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
基于ANSYS LSDyna的DEM-SPH-FEM耦合模拟滑坡入水动态行为研究,基于ANSYS LSDyna的DEM-SPH-FEM耦合的滑坡入水模拟分析研究,基于ansys lsdyna的滑坡入水模拟dem-sph-fem耦合 ,基于ANSYS LSDyna; 滑坡入水模拟; DEM-SPH-FEM 耦合,基于DEM-SPH-FEM耦合的ANSYS LSDyna滑坡入水模拟
auto_gptq-0.6.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
复件 复件 建设工程可行性研究合同[示范文本].doc
13考试真题最近的t64.txt
好用我已经解决报错问题
# 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!
auto_gptq-0.4.2-cp38-cp38-win_amd64.whl
自动立体库设计方案.pptx
# 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!
# 踏入C语言的奇妙编程世界 在编程的广阔宇宙中,C语言宛如一颗璀璨恒星,以其独特魅力与强大功能,始终占据着不可替代的地位。无论你是编程小白,还是有一定基础想进一步提升的开发者,C语言都值得深入探索。 C语言的高效性与可移植性令人瞩目。它能直接操控硬件,执行速度快,是系统软件、嵌入式开发的首选。同时,代码可在不同操作系统和硬件平台间轻松移植,极大节省开发成本。 学习C语言,能让你深入理解计算机底层原理,培养逻辑思维和问题解决能力。掌握C语言后,再学习其他编程语言也会事半功倍。 现在,让我们一起开启C语言学习之旅。这里有丰富教程、实用案例、详细代码解析,助你逐步掌握C语言核心知识和编程技巧。别再犹豫,加入我们,在C语言的海洋中尽情遨游,挖掘无限可能,为未来的编程之路打下坚实基础!
用deepseek变现实操流程,小白必看。
在日常的工作和学习中,你是否常常为处理复杂的数据、生成高质量的文本或者进行精准的图像识别而烦恼?DeepSeek 或许就是你一直在寻找的解决方案!它以其高效、智能的特点,在各个行业都展现出了巨大的应用价值。然而,想要充分发挥 DeepSeek 的优势,掌握从入门到精通的知识和技能至关重要。本文将从实际应用的角度出发,为你详细介绍 DeepSeek 的基本原理、操作方法以及高级技巧。通过系统的学习,你将能够轻松地运用 DeepSeek 解决实际问题,提升工作效率和质量,让自己在职场和学术领域脱颖而出。现在,就让我们一起开启这场实用又高效的学习之旅吧!