http://www.cnblogs.com/coolbug/articles/116311.html

简介:

写此文,是希望有高手能用.Net下与AD相关的类或者名字空间写出类似解决方案。 
需求:本系统不在两个域中的任何一个域中,但是要求验证登陆的帐号(形如 UserName@Dmain)是否在两个域中的其中的一个域中。不能建立信任域。 
小技巧:利用 Net Use命令登陆的返回值,并隐藏 命令提示符的窗口。 

/// <summary> 
        
/// 向域控制器发送Net Use 命令 ,返回登陆 正确与否字符可串 
        
/// </summary> 
        
///  <param name="ip">域控制器IP</param> 
        
/// <param name="Domain">域名</param> 
        
/// <param name="strName">登陆帐号</param> 
        
/// <param name="strPassWord">登陆密码</param> 
        
/// <returns></returns>
 
         public   string []  StartApp( string  ip, string  Domain, string  strName, string  strPassWord) 
        

            Process app
=new Process(); 
            
string netCMD=" use \\\\"+ip+"\\ipc$ "+strPassWord+" /user:"+Domain+"\\"+strName; 
            ProcessStartInfo info
=new ProcessStartInfo(@"net",netCMD); 
            info.RedirectStandardError
=true
            info.RedirectStandardOutput
=true
            info.UseShellExecute
=false
            info.CreateNoWindow 
= true
            app.StartInfo
=info; 
            app.Start(); 
            app.WaitForExit(); 
             
            StreamReader reader
=app.StandardOutput; 
            
string ok=reader.ReadLine(); 
            
string no=app.StandardError.ReadLine(); 
            
string [] appStr=new string[2]; 
            appStr[
0]=ok; 
            appStr[
1]=no; 
            
this.ExitApp(ip); 
            
return appStr; 
        }

 

/// <summary> 
        
/// 关闭Net Use到域控制器上本地的连接   
        
/// </summary> 
        
/// <param name="ip">域控制器的IP</param>
 
         public   void  ExitApp( string  ip) 
        

            Process app
=new Process(); 
            
string netCMD=" use \\\\"+ip+"\\ipc$ /del"
            ProcessStartInfo info
=new ProcessStartInfo(@"net",netCMD); 
            info.CreateNoWindow 
= true
            app.StartInfo
=info; 
            app.Start(); 
            app.WaitForExit(); 
        }


/// <summary> 
        
/// 检查用户是否是域中合法用户 
        
/// </summary> 
        
///  <param name="ip">域控制器IP</param> 
        
/// <param name="Domain">域名</param> 
        
/// <param name="strName">登陆帐号</param> 
        
/// <param name="strPassWord">登陆密码</param> 
        
/// <returns>返回是否连接上信息,true 连接上;false,则没有连接上</returns>
 
         public   bool  CheckDomain( string  ip, string  Domain , string  strName, string  strPassWord) 
        

            
string [] appStr=this.StartApp(ip,Domain,strName,strPassWord); 
            
bool CheckOK=false
            
if(appStr[0]!=null
            

                CheckOK
=true
            }
 
            
if(appStr[1]!=null
            

                CheckOK
=false
            }
 
            
return CheckOK; 
        }

登陆按纽事件: 

string  Domain1 = System.Configuration.ConfigurationSettings.AppSettings[ " Domain1 " ].ToString(); 
                        
string  IP1 = System.Configuration.ConfigurationSettings.AppSettings[ " IP1 " ].ToString(); 
                        
string  Domain2 = System.Configuration.ConfigurationSettings.AppSettings[ " Domain2 " ].ToString(); 
                        
string  IP2 = System.Configuration.ConfigurationSettings.AppSettings[ " IP2 " ].ToString(); 
                        
if (Domain == Domain1) 
                        

                            
if(this.CheckDomain(IP1,Domain1,strName,strPassWord)==false
                            

                                
throw new Exception("用户名或密码出错"); 
                            }
 
                        }
 
                        
else   if (Domain == Domain2) 
                        

                            
if(this.CheckDomain(IP2,Domain2,strName,strPassWord)==false
                            

                                
throw new Exception("用户名或密码出错"); 
                            }
 
                        }
 
                        
else  
                        

                            
throw new Exception("填写的域不在域中,请检查域名是否写错");
本文转自kenty博客园博客,原文链接http://www.cnblogs.com/kentyshang/archive/2006/09/05/495618.html如需转载请自行联系原作者

kenty
相关文章
|
7月前
|
数据采集 网络协议
WWW(URL,HTTP,HTML)
WWW(URL,HTTP,HTML)
137 1
Http 实现用户登录(mysql+html+request)
Http 实现用户登录(mysql+html+request)
|
JavaScript 前端开发 网络协议
HTML基础标签 && CSS选择器 && JavaScript基础语法 && WebAPI_ && 页面设计 && HTTP协议
HTML基础标签 && CSS选择器 && JavaScript基础语法 && WebAPI_ && 页面设计 && HTTP协议
61 0
|
数据采集 数据挖掘 测试技术
在Objective-C中使用ASIHTTPRequest发送HTTP请求并获取HTML内容
在Objective-C中使用ASIHTTPRequest发送HTTP请求并获取HTML内容
|
存储 Web App开发 网络协议
HTML&CSS Day01 功能元素与HTTP请求协议详解
HTML&CSS Day01 功能元素与HTTP请求协议详解
71 0
HTML&CSS Day01 功能元素与HTTP请求协议详解
|
数据可视化 网络协议
HTTP HTML 概述
HTTP HTML 概述
63 0
|
存储 缓存 JavaScript
Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
为了解决调用一些依赖的如echarts等一些js的代码模块引入的问题,就需要静态文件了。 本篇解说StaticFileController,在返回的html文本中调用外部js文件,类似的,其他文件都是一样了,只是引入的后缀名不一样。
Qt+QtWebApp开发笔记(六):http服务器html实现静态相对路径调用第三方js文件
|
Java
Java HTTP请求 如何获取并解析返回的HTML内容
在Java开发中,经常会遇到需要获取网页内容的情况。而HTTP请求是实现这一目标的常用方法之一。本文将介绍如何使用Java进行HTTP请求,并解析返回的HTML内容。
496 0
|
XML JSON 前端开发
Qt+QtWebApp开发笔记(五):http服务器html中使用json触发ajax与后台交互实现数据更新传递
前面完成了页面的跳转、登录,很多时候不刷新页面就想刷新局部数据,此时ajax就是此种技术,且是异步的。   本篇实现网页内部使用js调用ajax实现异步交互数据。   在js中使用 ajax是通过XMLHttpRequest来实现的。
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation
下一篇
DataWorks