/// <summary>
/// 搜索AD人员
/// </summary>
/// <param name="keyWords">搜索部门关键字</param>
/// <returns>AD人员集合</returns>
public List<DomainUser> SearchPersonByDeptName(string keyWords)
{
List<DomainUser> ReturnList = SearchAdObjectCache(new DomainConfig(Constants.C_SEARCH_ByDeptName, ldapPath), keyWords).ConvertAll(new Converter<DomainObject, DomainUser>(O2User));
return ReturnList;
}
 public static readonly string C_SEARCH_ByDeptName = "(department={0}*)";
 internal struct DomainConfig
{
static DomainConfig()
{
string ServerUrl = "LDAP://域";
if (string.IsNullOrEmpty(ServerUrl))
{
_activeObject = Constants.C_ACTIVE_OBJECT;
}
else
{
_activeObject = ServerUrl;
}
}
private static string _activeObject;
public static string ActiveObject
{
get { return _activeObject; }
set { _activeObject = value; }
} private string _searchConditon;
public string SearchConditon
{
get { return _searchConditon; }
set { _searchConditon = value; }
}
string ldapPath ;
public DomainConfig(string sCodition, string LDAPPath)
{
_searchConditon = sCodition;
ldapPath = LDAPPath;
}
public DirectoryEntry[] ADEntrysGet()
{
string[] Paths=ldapPath.Split(new char[] { ';' }, StringSplitOptions.RemoveEmptyEntries);
DirectoryEntry[] DEs = new DirectoryEntry[Paths.Length];
for (int i = ; i < Paths.Length;i++ )
{
DirectoryEntry deRoot;
string ADUser = string.Empty;
string ADPassword = string.Empty;
if (string.IsNullOrEmpty(ADUser))
{
deRoot = new DirectoryEntry(Paths[i]);
}
else
{
deRoot = new DirectoryEntry(Paths[i], ADUser, ADPassword);
}
DEs[i]=deRoot;
}
return DEs;
}
}
public static readonly string C_ACTIVE_OBJECT = "LDAP://域";
 /// </summary>
/// <param name="dc">搜索目标和条件</param>
/// <param name="keyWords">关键字</param>
/// <returns>AD对象集合</returns>
private static List<DomainObject> SearchAdObjectCache(DomainConfig dc, string keyWords)
{
List<DomainObject> ReturnList = new List<DomainObject>();
object CacheObject;
string CacheName = "DomainSearchAdObjectCache" + dc.SearchConditon + keyWords;
if (string.IsNullOrEmpty(keyWords) || keyWords.Length < KeyWordLimitLength)
{ }
else
{
CacheObject = CacheHelper.Get(CacheName);
if (CacheObject != null)
{
ReturnList = (List<DomainObject>)CacheObject;
}
else
{
ReturnList = SearchAdObject(dc, keyWords);
CacheObject = CacheHelper.Get(CacheName);
if (CacheObject == null && ReturnList != null)
{
CacheHelper.Insert(CacheName, ReturnList, CacheDuration);
}
}
}
return ReturnList;
}
/// <summary>
/// AD对象搜索
/// </summary>
/// <param name="dc">搜索目标和条件</param>
/// <param name="keyWords">关键字</param>
/// <returns>AD对象集合</returns>
private static List<DomainObject> SearchAdObject(DomainConfig dc, params object[] keyWords)
{
List<DomainObject> ObjectList = new List<DomainObject>();
DirectoryEntry[] DEs = dc.ADEntrysGet();
foreach (DirectoryEntry DE in DEs)
{
//建立ActiveDirectory绑定
using (DirectoryEntry deRoot = DE)
{
//建立ActiveDirectory搜索类
using (DirectorySearcher ds = new DirectorySearcher(deRoot))
{
//搜索条件
ds.Filter = string.Format(dc.SearchConditon, keyWords);
//设置返回条目
//ds.SizeLimit = 40;
//搜索结果
SearchResultCollection srCollection = ds.FindAll();
//如果没有结果,返回空数据
if (srCollection != null && srCollection.Count > )
{
ADUser dUser = null;
ADGroup dGroup = null;
foreach (SearchResult sr in srCollection)
{
if (GetProperty(Constants.AD_USER_objectcategory, sr.Properties).ToString().ToLower().Contains("person"))
{
dUser = new ADUser();
dUser = ADUserSet(sr.Properties);
ObjectList.Add(dUser);
}
else
{
dGroup = new ADGroup();
dGroup = ADGroupSet(sr.Properties);
ObjectList.Add(dGroup);
}
}
}
}
}
}
return ObjectList;
}

LDAP查询实例的更多相关文章

  1. node.js下LDAP查询实践

    目标: 从一个LDAP Server获取uid=kxh的用户数据 LDAP地址为:ldap://10.233.21.116:389 在工程根目录中,先npm一个LDAP的访问库ldpajs npm i ...

  2. SqlSugar-执行Sql语句查询实例

    使用SqlSugar执行sql语句 1.简单查询 SqlSugarClient db = SugarContext.GetInstance(); //执行sql语句,处理 //1.执行sql,转成li ...

  3. 【MySQL】分页查询实例讲解

    MySQL分页查询实例讲解 1. 前言 本文描述了团队在工作中遇到的一个MySQL分页查询问题,顺带讲解相关知识点,为后来者鉴.本文的重点不是"怎样"优化表结构和SQL语句,而是探 ...

  4. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(三)(错误整理篇)

    使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二) 以上两篇已经把流 ...

  5. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(二)(代码篇)

    这篇是上一篇的延续: 用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一) 源代码在github上可以下载,地址:https://github.com/guoxia ...

  6. 使用ssm(spring+springMVC+mybatis)创建一个简单的查询实例(一)

    梳理下使用spring+springMVC+mybatis 整合后的一个简单实例:输入用户的 ID,之后显示用户的信息(此次由于篇幅问题,会分几次进行说明,此次是工程的创建,逆向生成文件以及这个简单查 ...

  7. php MongoDB driver 查询实例

    //是否只查mx $mx_on_switch = I("post.mx_on_switch"); //mx模糊查询 $mx_vague_check = I("post.m ...

  8. Elasticsearch学习系列之term和match查询实例

    Elasticsearch查询模式 一种是像传递URL参数一样去传递查询语句,被称为简单查询 GET /library/books/_search //查询index为library,type为boo ...

  9. Yii框架 多表查询实例

    Yii框架多表查询实例:总共分为两个步骤(以下的代码我全部都写在model中):1.先在主表model中声明关联表中所需要查询的字段. public $surveyls_description; // ...

随机推荐

  1. 【Python】Python与文本处理langid工具包的文本语言检测和歧视

    1.问题的叙述性说明 使用Python文本处理.文字有时被包括中国.英语.在日本和其他语言文字,进行处理.这个时候就须要判别当前文本是属于哪个语系的. Python中有个langid工具包提供了此功能 ...

  2. 从[java.lang.OutOfMemoryError: Java heap space]恢复

    出现java.lang.OutOfMemoryError: Java heap space该错误或者是程序问题,或者被分配到JVM内存真的是不够的. 一般来说都是能够事前可控解决的. 可是假设不可控的 ...

  3. .net的自定义JS控件,运用了 面向对象的思想 封装 了 控件(.net自定义控件开发的第一天)

    大家好!我叫刘晶,很高兴你能看到我分享的文章!希望能对你有帮助! 首先我们来看下几个例子 ,就能看到 如何 自定义控件! 业务需求: 制作  一个   属于 自己的    按钮 对象    ,然后 像 ...

  4. AngularJS应用开发思维之2:数据绑定

    在声明式模板中显示数据 因为不能像jQuery一样将DOM操作混在模板里,声明式模板很快让我们变得束手束脚. 一个典型的问题:在声明式模板里怎么显示数据? 假设我们有某人的基本信息,保存在一个json ...

  5. 有趣Web之Json(四)---json与(Object/List/Map)相互转化

    干web报名时间.通常,他们需要json转换为Object/list/map要么Object/List/map转换为json,由能够编写代码的简单包装非常多,以减轻负担. 本文将给出json的一系列的 ...

  6. 创建GitHub技术博客

    创建GitHub技术博客全攻略 githubio技术博客网站生成 说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字.本 ...

  7. 第4章3节《MonkeyRunner源码剖析》ADB协议及服务: ADB协议概览SYNC.TXT翻译参考(原创)

    天地会珠海分舵注:本来这一系列是准备出一本书的,详情请见早前博文“寻求合作伙伴编写<深入理解 MonkeyRunner>书籍“.但因为诸多原因,没有如愿.所以这里把草稿分享出来,所以错误在 ...

  8. 一步一步写算法(之prim算法 下)

    原文:一步一步写算法(之prim算法 下) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前两篇博客我们讨论了prim最小生成树的算法,熟悉 ...

  9. SQL SERVER 2005中如何获取日期(一个月的最后一日、上个月第一天、最后一天、一年的第一日等等)

    原文:[转]SQL SERVER 2005中如何获取日期(一个月的最后一日.上个月第一天.最后一天.一年的第一日等等) 在网上找到的一篇文章,相当不错哦O(∩_∩)O~ //C#本周第一天       ...

  10. 搭建环境Visual Studio 2013 社区版

    搭建环境Visual Studio 2013 社区版 ActiveReports 9刚刚发布3天,微软就发布了 Visual Studio Community 2013 开发环境. Visual St ...