/// <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. UIDocumentInteractionController 文件预览

    //创建并从底部弹出来 - (void)viewDidLoad { [super viewDidLoad]; [self setupDocumentControllerWithURL:fileURL] ...

  2. hdu 4915 Parenthese sequence(模拟)2014多培训学校5现场

    Parenthese sequence                                                                     Time Limit: ...

  3. 冒泡排序与简单选择排序——Java实现

    1.冒泡排序 1)原理说明:反复遍历要排序的数列,一次比較两个元素,假设他们的顺序错误就把他们交换过来.走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕. 2)代码实现: pa ...

  4. 数据结构与算法之递推算法 C++与PHP实现

    数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的.往往是在发展一种算法的时候,构建了适合于这样的算法的数据结构.一种数据结构假设脱离了算法,也就没有存在的价值了. 算法的作用----解决 ...

  5. PHP 13: 类

    原文:PHP 13: 类 Notice: This article is working on progress!本章将介绍PHP类.现在,基本上每种语言都支持面向对象,当然PHP也不列外.PHP在以 ...

  6. 如何查找Linux的函数定义的位置?

    网上的许多站点提供这样的服务,如下面这个: http://lxr.free-electrons.com/ident?v=3.10 Linux的错误返回值:3.10版本 Linux/include/ua ...

  7. Visual Studio 2015 & C#6.0

      Visual Studio 2015 & C#6.0 试用报告,持续更新.   昨天早上看到了.net开源的消息,我是非常兴奋的,毕竟局限于Windows的.NET经常被人唾弃.VB暂且不 ...

  8. PhpStorm创建Drupal模块项目开发教程

    在PhpStorm开发工具中,创建Drupal开发项目有两种方式:整合Drupal到现有的项目中和直接创建一个新的Drupal模块. 接下来将展示这两种方式的具体操作! 整合Drupal到现有的项目 ...

  9. 终于有人把O2O、C2C、B2B、B2C的区别讲透了!

    终于有人把O2O.C2C.B2B.B2C的区别讲透了! 一.O2O.C2C.B2B.B2C的区别在哪里? O2O是online to offline分为四种运营模式: 1.online to offl ...

  10. js操作cookie方法

    cookie cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份.进行session跟踪而储存在用户本地终端上的数据(通常经过加密).定义于RFC2109和2965都已废弃,最 ...