知识大全 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远程访问共享目录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 相关知识介绍 SMB
知识大全 android系统如何通过$ adb 来获得/data/data目录的访问权限
android系统如何通过$adb来获得/data/data目录的访问权限android是linux内核/data/data是root用户的目录,普通用户是无法访问的,如果你需要访问,那么你的手机需要
先打开Apache的conf目录下的文件在末尾添加如下代码复制代码代码如下:<VirtualHost*:>ServerNamemydemoDocumentRoot"D:/mydemo"
知识大全 IIS下多站点利用虚拟目录 访问共用(图片)文件夹
IIS下多站点利用虚拟目录访问共用(图片)文件夹 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 windows7宽带连接成功但是本地连接无Internet访问要怎么办
windows7宽带连接成功但是本地连接无Internet访问要怎么办?详细(是选择公用网络/家庭网络?还是工作网络 以下文字资料是由(本站网www.cha138.co
我在一个项目中需要使用C:\\WINDOWS\\system\\drivers\\etc这个目录下的hosts文件并且在该文件的最后加上一个这样的字符串: r
Windows群集开发:1)目录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &nbs
知识大全 ant - java 构建工具 - hello ant
管理你的代码doc文件编译配置等开发工作你是怎末做的自己管理源目录编译文件copy实施在window写bat在unix写shell? 可惜我不怎末会写所以我制作一个ejb的过程是这样的写代码
Java程序实现压缩某目录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! publicclass
JAVA中用递归函数来删除子目录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java是一门强