VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > C#编程 >
  • C#教程之C#实现Check Password和锁定输错密码锁定账户功能

本站最新发布   C#从入门到精通
试听地址  
https://www.xin3721.com/eschool/CSharpxin3721/

银行卡大家都使用,在密码输错超过限制次数之后,就容易被锁死,智能到银行柜台才能解锁,那么这一功能如果实现的呢,今天小编通过实例代码给大家详细讲解,一起跟随小编看看吧。

C#实现的Check Password,并根据输错密码的次数分情况锁定账户:如果输入错误3次,登录账户锁定5分钟并提示X点X分后重试登录。如果5分钟后再次输入,累计输入错误密码累计达到5次。则账户会被永久锁定,需联系系统管理员进行把数据库中的输入错误的次数(errorcount)进行清零解锁才能登陆。实现代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
public class UserInfo1
{
 public string Error_count { get; set; }
 public string Error_time { get; set; }
}
 
 
public ExecutionResult CheckAccountPwd(string account, string password)
 {
  ExecutionResult execRes;
  execRes = new ExecutionResult();
 
  string[] strs = account.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
  if (strs.Length < 2)
  {
   execRes.Status = false;
   execRes.Message = "无效的账号。";
  }
  else
  {
   UserInfo1 info1 = null;
   execRes = CallEEPMethod.Execute(dbName, "sDEM2131", "GetUserInfo", strs[1].ToLower());
   if (execRes.Status && execRes.Anything != null)
   {
    info1 = JsonConvert.DeserializeObject<UserInfo1>(execRes.Anything.ToString());
    if (info1 != null)
    {
     int errcount = Convert.ToInt32(info1.Error_count);
     DateTime errtime = Convert.ToDateTime(info1.Error_time);
     if (errcount != 5)
     {
      //int errorCount
      DateTime dt0 = DateTime.Now;
      DateTime dt1 = errtime.AddMinutes(5);
      double s = (dt1 - dt0).TotalSeconds;
      if (errcount == 3 && s > 0)
      {
       execRes.Status = false;
       execRes.Message = "密码连续输入错误3次,请于 " + errtime.AddMinutes(+5).ToString("yyyy-MM-dd HH:mm:ss") + " 之后重试,thanks!";
      }
      else
      {
       if (CheckFromLDAP(strs[1], password, strs[0]))
       {
        CPU.Models.UserInfo userInfo = CheckUser(strs[1]);
        if (userInfo == null)
        {
         execRes.Status = false;
         execRes.Message = "您没有权限操作此系统!";
        }
        else
        {
         execRes.Status = true;
         execRes.Anything = userInfo;
         //error count 清0
         CallEEPMethod.Execute(dbName, "sDEM2131", "UpdateUserLoginError", strs[1].ToLower() + ","+"0" + "," + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
         
        }
       }
       else
       {
        execRes.Status = false;
        // 次数+1
        if (errcount + 1 > 1)
         execRes.Message = "密码连续输入错误" + (errcount+1).ToString() + "次。密码连续输错5次将锁定!";
        else
         execRes.Message = "密码输入错误!";
        dt0 = DateTime.Now;
        CallEEPMethod.Execute(dbName, "sDEM2131", "UpdateUserLoginError", strs[1].ToLower() + "," + (errcount + 1).ToString()+"," + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
        if (errcount + 1 == 3)
         execRes.Message = "密码连续输入错误" + (errcount + 1).ToString() + "次,请于 " + dt0.AddMinutes(5).ToString("yyyy-MM-dd HH:mm:ss") + " 之后重试,thanks!";
        if (errcount + 1 == 5)
         execRes.Message = "账号密码连续输入错误5次,已锁定!请联系管理员解锁,thanks!";
       }
      }
     }
     else
     {
      execRes.Status = false;
      execRes.Message = "账号密码连续输入错误5次,已锁定!请联系管理员解锁,thanks!";
     }
    }
    else
    {
     execRes.Status = false;
     execRes.Message = "找不到此账号,请重新输入!";
    }
   }
   else
   {
    execRes.Status = false;
    execRes.Message = "找不到此账号,请重新输入!";
   }
  }
  return execRes;
 }

根据登录不同的网域进行Form验证

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
private bool CheckFromLDAP(string ntID, string ntPWD, string domain)//根据登录的不同网域进行Form验证
 {
  bool result = false;
  string strUser;
  try
  {
   strUser = domain + "\\" + ntID;
   if (domain.ToLower().Equals("gi"))
    domain = "gi.compal.com";
   else if (domain.ToLower().Equals("cqc_cci"))
    domain = "10.140.1.1";
   else if (domain.ToLower().Equals("vn"))
    domain = "10.144.2.101";
   else if (domain.ToLower().Equals("njp_cci"))
    domain = "10.128.50.1";
   else
    domain = "compal.com";
   DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, strUser, ntPWD);
   using (DirectorySearcher searcher = new DirectorySearcher(entry))
   {
    searcher.Filter = string.Format("(&(objectClass=user)(sAMAccountName={0}))", ntID);
    SearchResult sr = searcher.FindOne();
    using (SearchResultCollection results = searcher.FindAll())
    {
     if (results.Count > 0)
     {
      //if (results[0].Properties.Contains("employeeID"))
      // empID = results[0].Properties["employeeID"][0].ToString();
      //else
      // empID = results[0].Properties["extensionattribute3"][0].ToString();
      result = true;
     }
    }
   }
  }
  catch (Exception ex)
  {
   //LogHelper.Error(ex.Message);
  }
 
  return result;
 }

根据不同的用户登录进行权限管理

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public bool CheckPermission(string controllerName, string actionName,string plant, string userID)
  {
   bool result = false;
   //if (actionName.StartsWith("_"))
   // actionName = actionName.Substring(1);
   UserInfo userInfo = CheckUser(userID);
   if (userInfo!=null)
   {
    if (controllerName == "Home")
     result = true;
    else if (userInfo.Permissions.Contains(controllerName))
    {
     if (!string.IsNullOrEmpty(plant))
     {
      if (userInfo.PlantCode.ToLower() == plant.ToLower() || userInfo.PlantCode == "ALL")
       result = true;
     }
     else
      result = true;
    }
   }
   return result;
  }

总结

以上所述是小编给大家介绍的C#实现Check Password和锁定输错密码锁定账户功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关教程