zoukankan      html  css  js  c++  java
  • c#实现WINDOWS登录 dodo

    using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;
    using System.Runtime.InteropServices;
    using System.Security.Principal;

    namespace yutest
    {
        public partial class _Default : System.Web.UI.Page
        {

            [DllImport("advapi32.dll", CharSet = CharSet.Auto)]
            public static extern bool LogonUser(string lpszUsername,string lpszDomain,string lpszPassword,int dwLogonType,int dwLogonProvider,out int phToken);


            protected void Page_Load(object sender, EventArgs e)
            {
                string aaa = System.Threading.Thread.CurrentPrincipal.Identity.Name;
                //string bbb = System.Threading.Thread.CurrentPrincipal.Identity.n;

                //System.Environment.UserDomainName  
                //System.Environment.UserName
               


            }

            protected void Button1_Click(object sender, System.EventArgs e)
            {
                //验证用户的输入是否为空
                if (tDomain.Text.Trim().Length > 0 && tUserName.Text.Trim().Length > 0&& tPassword.Text.Trim().Length > 0)
                {   //调用函数Login(string UserName, string Password, string Domain)
                    //实现Windows登录
                    if (Login(tUserName.Text.Trim(), tPassword.Text.Trim(),tDomain.Text.Trim()) == true)
                    {   //显示登录成功信息
                        LoginMsg.Text = "登录成功!!!";
                        LoginMsg.Visible = true;
                        return;
                    }
                    else
                    {   //显示登录失败信息
                        LoginMsg.Text = "登录失败,请重新输入用户名称、密码及其系统域名!!!";
                        LoginMsg.Visible = true;
                    }
                }

            }

            private bool Login(string UserName, string Password, string Domain)
            {       //获取用户名称和系统域名
                string text1 = Domain.Trim();
                string text2 = UserName.Trim();
                text2 = text2.Replace("/", @"\");      //处理符号“/”
                int num1 = text2.IndexOf('\\');        //获取符号“\”的索引
                if (num1 != -1)
                {   //格式化用户名称和系统域名
                    text1 = text2.Substring(0, num1);
                    text2 = text2.Substring(num1 + 1);
                }
                else
                {   //格式化用户名称和系统域名
                    num1 = text2.IndexOf('@');
                    if (num1 != -1)
                    {
                        text1 = text2.Substring(num1 + 1);
                        text2 = text2.Substring(0, num1);
                    }
                }
                //调用函数AuthenticateUser()实现用户Windows登录
                return AuthenticateUser(text2, Password.Trim(), text1);
            }
            private bool AuthenticateUser(string UserName, string Password,string Domain)
            {              //设置用户登录成功的标志
                bool flag1 = false;
                try
                {
                    int num1; IntPtr ptr1;
                    //调用Windows登录的API
                    if (!LogonUser(UserName, Domain, Password, 2, 0, out num1))
                    {   //返回登录结果
                        return flag1;
                    }
                    //调用.NET中的Windows登录
                    ptr1 = new IntPtr(num1);
                    WindowsIdentity identity1 = new WindowsIdentity(ptr1);
                    WindowsPrincipal principal1 = new WindowsPrincipal(identity1);
                    HttpContext.Current.User = principal1;
                    //设置系统Cookie和重定向页面
                    FormsAuthentication.SetAuthCookie(principal1.Identity.Name, false);
                    FormsAuthentication.RedirectFromLoginPage(UserName, false);
                    flag1 = true;
                }
                catch (Exception) { }
                return flag1;
            }

        }
    }

  • 相关阅读:
    系统综合实践 第1次实践作业
    Linq 中按照多个值进行分组(GroupBy,Count)
    敏捷开发综述
    心率
    二维数组 子数组和的最大值
    电梯调度算法
    课堂测试用例。。。
    分析文本文件中各单词出现的频率,并把频率最高的十个词打印出来
    dwz tree组件 取得所选择的值
    SQL Server -- 已成功与服务器建立连接,但是在登录过程中发生错误
  • 原文地址:https://www.cnblogs.com/zgqys1980/p/1639438.html
Copyright © 2011-2022 走看看