知识大全 Java访问windows活动目录(1)

Posted 目录

篇首语:与天地兮比寿,与日月兮齐光。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java访问windows活动目录(1)相关的知识,希望对你有一定的参考价值。

Java访问windows活动目录(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

   活动目录(AD)

  Active Directory 是用于 Windows Server 的目录服务

  它存储著网络上各种对象的有关信息 并使该信息易于管理员和用户查找及使用

  Active Directory 目录服务使用结构化的数据存储作为目录信息的逻辑层次结构的基础

  通过登录验证以及目录中对象的访问控制 将安全性集成到 Active Directory 中

  目录服务 如 Active Directory 提供了用于存储目录数据并使该数据可由网络用户和管理员使用的方法

  例如 Active Directory 存储了有关用户帐户的信息 如名称 密码 电话号码等 并允许相同网络上的其他已授权用户访问该信息

   LDAP

  LDAP是轻量目录访问协议 英文全称是Ligheight Directory Access Protocol

  LDAP是基于X 标准的

  LDAP 仅通过使用原始 X 目录存取协议 (DAP) 的功能子集而减少了所需的系统资源消耗

  与X 不同 LDAP支持TCP/IP 这对访问Internet是必须的

  LDAP和关系数据库是两种不同层次的概念 后者是存贮方式(同一层次如网格数据库 对象数据库) 前者是存贮模式和访问协议

  LDAP是一个比关系数据库抽象层次更高的存贮概念 与关系数据库的查询语言SQL属同一级别

   ADSI

  在Delphi中可以使用微软的ADSI(活动目录服务接口)来访问活动目录

  ADSI是一组以接口的形式提供目录服务的 是为基于目录服务提供的通用接口

  一些标准的ADSI提供者(Provider)有WinNT IIS LDAP和NDS

  可以通过ADSI存取四种网络目录结构

  WinNT (Microsoft SAM 数据库) LDAP (轻量目录存取协议) NDS (NetWare目录服务)和NWPAT(Novell NetWare x)

  ADSI可以使Windows NT 管理员的工作变得轻松

  ADSI支持管理员执行一些一般的管理任务 比如添加新用户 管理打印机 安全设定和控制NT域

  因为ADSI使用接口 任何支持的编程语言像Delphi BCB VB VC等都可以调用ADSI

  如在Delphi中调用ADSI 则需要引入活动目录类型库

  操作如下

  在IDE中 Project >Import Type Library

  选择 Active Ds Type Library(Version ) 单击 Create Unit

  Delphi会做相应的封装 生成ActiveDs_TLB pas文件

  Uses ActiveDs_TLB 就可以在Delphi程序中使用ADSI了

   JAVA+LDAP访问Window Server AD

  package ADOper;

  import java util Hashtable;

  import javax naming Context;

  import javax naming ldap LdapContext;

  import javax naming ldap InitialLdapContext;

  import javax naming NamingEnumeration;

  import javax naming directory SearchControls;

  import javax naming directory SearchResult;

  import javax naming NamingException;

  import javax naming directory Attribute;

  import javax naming directory Attributes;

  import java util Enumeration;

  public class ADOperTest

  public ADOperTest()

  

  public void GetADInfo()

  Hashtable HashEnv = new Hashtable();

  String LDAP_URL = ldap:// : ; //LDAP访问地址

  //String adminName = CN=OAWebUser CN=Users DC=Hebmc DC= ;//AD的用户名

  String adminName = Hebmc\\\\OAWebUser ; //注意用户名的写法 domain\\User 或

  adminName = ; //注意用户名的写法 domain\\User 或

  String adminPassword = chenzuooaup ; //密码

  HashEnv put(Context SECURITY_AUTHENTICATION simple ); //LDAP访问安全级别

  HashEnv put(Context SECURITY_PRINCIPAL adminName); //AD User

  HashEnv put(Context SECURITY_CREDENTIALS adminPassword); //AD Password

  HashEnv put(Context INITIAL_CONTEXT_FACTORY sun jndi ldap LdapCtxFactory ); //LDAP工厂类

  HashEnv put(Context PROVIDER_URL LDAP_URL);

  try

  LdapContext ctx = new InitialLdapContext(HashEnv null);

  SearchControls searchCtls = new SearchControls(); //Create the search controls

  searchCtls setSearchScope(SearchControls SUBTREE_SCOPE); //Specify the search scope

  String searchFilter = objectClass=User ; //specify the LDAP search filter

  //String searchFilter = objectClass=anizationalUnit ;//specify the LDAP search filter

  String searchBase = DC=Hebmc DC= ; //Specify the Base for the search//搜索域节点

  int totalResults = ;

  //Specify the attributes to return

  //String returnedAtts[] = memberOf ;//定制返回属性

  String returnedAtts[] =

   url whenChanged employeeID name userPrincipalName

   physicalDeliveryOfficeName departmentNumber telephoneNumber

   homePhone mobile department sAMAccountName whenChanged

   mail ; //定制返回属性

  searchCtls setReturningAttributes(returnedAtts); //设置返回属性集

  //Search for objects using the filter

  NamingEnumeration answer = ctx search(searchBase searchFilter searchCtls);

  while (answer hasMoreElements())

  SearchResult sr = (SearchResult) answer next();

  System out println( ************************************************ );

  System out println(sr getName());

  Attributes Attrs = sr getAttributes();

  if (Attrs != null)

  try

  for (NamingEnumeration ne = Attrs getAll(); ne hasMore(); )

  Attribute Attr = (Attribute) ne next();

  System out println( AttributeID= + Attr getID() toString());

  //读取属性值

  for (NamingEnumeration e = Attr getAll(); e hasMore();totalResults++)

  System out println(     AttributeValues= + e next() toString());

  

  System out println(     );

  //读取属性值

  Enumeration values = Attr getAll();

  if (values != null) // 迭代

  while (values hasMoreElements())

  System out println(     AttributeValues= + values nextElement());

  

  

  System out println(     );

  

  

  catch (NamingException e)

  System err println( Throw Exception : + e);

  

  

  

  System out println( Number: + totalResults);

  ctx close();

  

  catch (NamingException e)

  e printStackTrace();

  System err println( Throw Exception : + e);

  

  

  public static void main(String args[])

  ADOperTest ad = new ADOperTest();

  ad GetADInfo();

  

  

  备注

  使用LADP访问AD 注意用户名的写法 domain\\User 或

  如用户名不正确 则可能会出现如下异常

  javax naming AuthenticationException: [LDAP: error code : LdapErr: DSID C ment: AcceptSecurityContext error data vece

   Delphi 使用WinNT Provider访问Window Server AD

  unit Unt_AD;

  interface

  uses

  Windows Messages SysUtils Variants Classes Graphics Controls Forms

  Dialogs StdCtrls ComCtrls ActiveDs_TLB ActiveX ComObj;

  type

  TMainFrm = class(TForm)

  grp : TGroupBox;

  cbUseLogin: TCheckBox;

  lbl : TLabel;

  ADSIUsername: TEdit;

  lbl : TLabel;

  ADSIPassword: TEdit;

  ADSIDomainName: TEdit;

  btn : TButton;

  lbl : TLabel;

  GroupListView: TListView;

  ComputerListView: TListView;

  SeverListView: TListView;

  UserListView: TListView;

  lbl : TLabel;

  lbl : TLabel;

  Label : TLabel;

  lbl : TLabel;

  procedure btn Click(Sender: TObject);

  private

   Private declarations

  procedure GetDomainInformation(Domain: IADsContainer);

  procedure AddUserToList(ADsObj:IADs);

  procedure AddGroupToList(ADsObj:IADs);

  procedure AddComputerToList(ADsObj:IADs);

  public

   Public declarations

  end;

  //连接 Win NT 目录服务就是找到域控制器然后绑定到相应的对象上

  //绑定可以通过 ADsGetObject 或 ADsOpenObject 函数来实现

  //第一个函数使用登录用户缺省的信任级别

  //第二个函数允许开发者指定特殊的安全信任机制来绑定 ADSI 对象

  //缺省条件下 ADsGetObject函数根据当前用户进行安全认证

  function ADsGetObject(lpszPathName: PWideChar;   //第一个参数是对象的路径名

  const riid: TIID;          //第二个参数是对象的接口标识符

  out obj): HResult; stdcall; external activeds dll ;// 第三个参数用于返回得到的被请求的接口指针

  //ADsOpenObject 函数在不同的安全认证机制下绑定 ADSI 对象

  //它主要是通过调用参数返回的用户名和口令来认证的

  function ADsOpenObject(lpszPathName: PWideChar;    //第一个参数是对象的路径名

  lpszUserName: PWideChar;    //第二个参数是调用者提供的用户名

  lpszPassword: PWideChar;    //第三个参数是调用者提供的口令

  dwReserved: LongInt;        //第四个参数是一个保留的 provider 标识 用来确定绑定的认证方法

  const riid: TIID;           //第五个参数是请求接口的接口标识符

  out obj): HResult; stdcall; external activeds dll ; //最后一个参数用来返回请求的接口指针

  var

  MainFrm: TMainFrm;

  implementation

cha138/Article/program/Java/hx/201311/26267

相关参考

知识大全 JAVA远程访问共享目录

JAVA远程访问共享目录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  相关知识介绍  SMB 

知识大全 android系统如何通过$ adb 来获得/data/data目录的访问权限

android系统如何通过$adb来获得/data/data目录的访问权限android是linux内核/data/data是root用户的目录,普通用户是无法访问的,如果你需要访问,那么你的手机需要

知识大全 php 在windows下配置虚拟目录的方法介绍

  先打开Apache的conf目录下的文件在末尾添加如下代码复制代码代码如下:<VirtualHost*:>ServerNamemydemoDocumentRoot"D:/mydemo"

知识大全 IIS下多站点利用虚拟目录 访问共用(图片)文件夹

IIS下多站点利用虚拟目录访问共用(图片)文件夹  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  

知识大全 windows7宽带连接成功但是本地连接无Internet访问要怎么办

windows7宽带连接成功但是本地连接无Internet访问要怎么办?详细(是选择公用网络/家庭网络?还是工作网络  以下文字资料是由(本站网www.cha138.co

知识大全 使用java实现在文件中添加字符串

    我在一个项目中需要使用C:\\WINDOWS\\system\\drivers\\etc这个目录下的hosts文件并且在该文件的最后加上一个这样的字符串:   r

知识大全 1)目录

Windows群集开发:1)目录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs

知识大全 ant - java 构建工具 - hello ant

  管理你的代码doc文件编译配置等开发工作你是怎末做的自己管理源目录编译文件copy实施在window写bat在unix写shell?    可惜我不怎末会写所以我制作一个ejb的过程是这样的写代码

知识大全 Java程序实现压缩某目录

Java程序实现压缩某目录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  publicclass

知识大全 JAVA中用递归函数来删除子目录

JAVA中用递归函数来删除子目录  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Java是一门强