知识大全 Java访问windows活动目录(2)
Posted 知
篇首语:学向勤中得,萤窗万卷书。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java访问windows活动目录(2)相关的知识,希望对你有一定的参考价值。
Java访问windows活动目录(2) 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
// 获取域信息
procedure TMainFrm GetDomainInformation(Domain: IADsContainer);
var
Enum: IEnumVariant;
ADsTempObj: OLEVariant;
ADsObj: IADs;
Value: LongWord;
begin
//清空用户 组和计算机列表
UserListView Items Clear;
GroupListView Items Clear;
ComputerListView Items Clear;
//获取枚举对象 并赋值给 Enum 变量
Enum := (Domain _NewEnum) as IEnumVariant;
//利用枚举对象查找 把每个子对象赋值给临时的 OLEVariant 对象
while (Enum Next( ADsTempObj Value) = S_OK) do
begin
ADsObj := IUnknown(ADsTempObj) as IADs; //获得临时对象 OLEVariant 变量赋值给 ADSI 对象
if AdsObj Class_ = User then //如果是用户对象
AddUserToList(ADsObj);
if AdsObj Class_ = Group then //如果是组对象
AddGroupToList(ADsObj);
if AdsObj Class_ = Computer then //如果是计算机对象
AddComputerToList(ADsObj);
ADsTempObj:=Null; //释放OLEVariant
end;
end;
procedure TMainFrm AddUserToList(ADsObj:IADs);
var aListItem:TListItem;
begin
aListItem:=UserListView Items Add;
aListItem Caption:=ADsObj Name;
aListItem SubItems Add(ADsObj Class_);
aListItem SubItems Add(ADsObj ADsPath);
aListItem SubItems Add(ADsObj Parent);
// aListItem SubItems Add(ADsObj Get( sAMAccountName ));
end;
procedure TMainFrm AddGroupToList(ADsObj:IADs);
var aListItem:TListItem;
begin
aListItem:=GroupListView Items Add;
aListItem Caption:=ADsObj Name;
aListItem SubItems Add(ADsObj Class_);
aListItem SubItems Add(ADsObj ADsPath);
end;
procedure TMainFrm AddComputerToList(ADsObj:IADs);
var aListItem:TListItem;
begin
aListItem:=ComputerListView Items Add;
aListItem Caption:=ADsObj Name;
aListItem SubItems Add(ADsObj Class_);
aListItem SubItems Add(ADsObj ADsPath);
end;
procedure TMainFrm btn Click(Sender: TObject);
var
UnknownObject: IUnknown;
DomainPath ADUser ADPass: WideString;
Domain: IADsContainer;
begin
// 指定域路径
DomainPath := WinNT:// + ADSIDomainName Text;
ADUser:= ADSIUsername Text;
ADPass:= ADSIPassword Text;
DomainPath := WinNT:// ;
ADUser: ADUser:= Hebmc\\OAWebUser ; //注意用户名称的写法 domain\\User 或
ADUser:= ; //注意用户名称的写法 domain\\User 或
ADPass:= chenzuooaup ;
// 如果使用用户登录了信息
if cbUseLogin Checked then // 使用用户登录的信息创建域对象
OleCheck(AdsOpenObject(PWideChar(DomainPath)
PWideChar(ADUser)
PWideChar(ADPass)
IID_IADsContainer
UnknownObject))
else
OleCheck(ADsGetObject(PWideChar(DomainPath)
IID_IADsContainer
UnknownObject));
// 设定域对象
Domain := UnknownObject as IADsContainer;
// 从域中获得信息列表
GetDomainInformation(Domain);
end;
end
备注
* 注意用户名的写法 domain\\User 或
* Delphi使用WinNT Provider方式访问AD 在使用ADsObj Get( 属性 )时 会有一个报错 高速缓存中找不到目录属性 (The directory property cannot be found in the cache)
目前该问题还不知如何解决
* 资料参考《Delphi深度探索 活动目录开发》
作者 陈省(Hubdog)
Delphi 使用LDAP访问Window Server AD
unit Main;
interface
uses
Windows Messages SysUtils Variants Classes Graphics Controls Forms
Dialogs StdCtrls ActiveDs_TLB ActiveX ComObj;
type
TMainFrm = class(TForm)
Button : TButton;
ObjMemo: TMemo;
OUMemo: TMemo;
UserMemo: TMemo;
cbUseLogin: TCheckBox;
Obj_Label: TLabel;
OU_Label: TLabel;
Users_Label: TLabel;
procedure Button Click(Sender: TObject);
private
Private declarations
public
Public declarations
procedure GetADInfo(aUser aPass aDomainPath: WideString);
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
$R * dfm
procedure TMainFrm Button Click(Sender: TObject);
var DomainPath ADUser ADPass: WideString;
begin
DomainPath := LDAP:// /OU=省公司 OU=组织架构 DC=Hebmc DC= ;//LDAP访问AD的路径
ADUser:= Hebmc\\OAWebUser ; //注意用户名称的写法 域名称 + 用户名称 或
ADUser:= ; //注意用户名称的写法 域名称 + 用户名称 或
ADPass:= chenzuooaup ; //用户密码
GetADInfo(ADUser ADPass DomainPath);
end;
procedure TMainFrm GetADInfo(aUser aPass aDomainPath: WideString);
var
UnknownObject: IUnknown;
Enum: IEnumVariant;
ADsTempObj: OLEVariant;
Domain: IADsContainer;
ADsObj: IADs;
Value: LongWord;
begin
// 如果使用AD用户信息登录
if cbUseLogin Checked then // 使用用户登录的信息创建域对象
OleCheck(AdsOpenObject(PWideChar(aDomainPath)
PWideChar(aUser)
PWideChar(aPass)
IID_IADsContainer
UnknownObject))
else
OleCheck(ADsGetObject(PWideChar(aDomainPath)
IID_IADsContainer
UnknownObject));
// 设定域对象
Domain := UnknownObject as IADsContainer;
//获取枚举对象 并赋值给 Enum 变量
Enum := (Domain _NewEnum) as IEnumVariant;
//利用枚举对象查找 把每个子对象赋值给临时的 OLEVariant 对象
while (Enum Next( ADsTempObj Value) = S_OK) do
begin
ADsObj := IUnknown(ADsTempObj) as IADs; //获得临时对象 OLEVariant 变量赋值给 ADSI 对象
ObjMemo Lines Add(AdsObj Class_); //对象类型
if AdsObj Class_ = anizationalUnit then //如果是组织单元对象
OUMemo Lines Add(ADsObj Name) ;
if AdsObj Class_ = user then //如果是用户对象
UserMemo Lines Add(ADsObj Name+ (用户代码= +ADsObj Get( sAMAccountName )+ ) );
//递归 得到组内相关用户
GetADInfo(aUser aPass ADsObj ADsPath);
ADsTempObj:=Null; //释放OLEVariant
end;
end;
end
备注
* 注意用户名的写法 domain\\User 或
* Delphi使用LDAP方式访问AD 可以使用ADsObj Get( 属性 )时得到相关属性值
cha138/Article/program/Java/hx/201311/27115相关参考
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
知识大全 ant - java 构建工具 - hello ant
管理你的代码doc文件编译配置等开发工作你是怎末做的自己管理源目录编译文件copy实施在window写bat在unix写shell? 可惜我不怎末会写所以我制作一个ejb的过程是这样的写代码
Java程序实现压缩某目录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! publicclass
JAVA中用递归函数来删除子目录 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Java是一门强
Java对话框获取目录、文件路径 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! publicFi