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

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

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

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

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

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

C#实现的Check Password和锁定输错密码锁定账户的更多相关文章

  1. 输错密码?这个 sudo 会“嘲讽”你

    导读 你在 Linux 终端中会有很多的乐趣.我今天要讲的不是在终端中跑火车.我今天要讲的技巧可以放松你的心情.你学习过如何在命令行中增加 sudo 命令的超时,今天的文章中,我会向你展示如何让 su ...

  2. pycharm使用gitlab输错密码解决办法

    在pycharm中使用http方式连接gitlab,在测试连接的时候提示输入用户名,密码.密码输错后,以后的每次test都是使用错误的密码,在删除pycharm后也是一样,解决方法是在控制面板\用户帐 ...

  3. windows中git输错密码后不能修改问题

    坑位 当使用git做代码管理的时候,如果仓库地址地选用的是https,在初始拉取代码时,需要输入账号和密码,如果不小心输错了,后续一直会验证失败,无法再重新更正账号信息 Why 因为git为了不让你每 ...

  4. windows中git输错密码后不能重新输入的问题

    当输入密码错误后,git会把密码保存在windows的你的当前用户名的缓存中. 我们可以在控制面板中寻找到这个缓存,再删掉就可以了. 首先,打开“控制面板”,把“查看方式”改为“大图标”,再打开“用户 ...

  5. python作业设计:输入用户名密码,认证成功后显示欢迎信息,输错三次后锁定

    作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3.判 ...

  6. python学习-实现用户密码登录,输错三次锁定

    作业需求: 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 实现思路: 判断用户是否在黑名单,若在黑名单,则将用户锁定 判断用户是否存在,若不存在,提示用户不存在 若用户存在,判断登录密码是否 ...

  7. python3 登录验证小程序,同一用户输错三次密码,锁定账户

    ''' 让用户输入用户名密码 认证成功后显示欢迎信息用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态''' # !/usr/bin/env python # -*- coding:u ...

  8. Python3.5 Day1作业:实现用户密码登录,输错三次锁定。

    作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3. ...

  9. python 循环和file操作实现用户密码输错三次将用户锁定

    一.需求编写登录接口1.输入用户名密码2.认证成功后显示欢迎信息3.输错三次后锁定 二.简单思路登录,三次密码输入错误锁定用户1.用户信息文件:存放用户名和密码2.黑名单文件:将输入三次错误的用户加入 ...

随机推荐

  1. xhsell关闭jupyter仍然运行的命令

    nohup jupyter notebook & nohup 和 &都是linux的命令 1.& 当在前台运行某个作业时,终端被该作业占据:可以在命令后面加上& 实现后 ...

  2. Java博客专栏

    1. Java23种设计模式 2. JVM虚拟机 3. 设计模式6大原则 4. Java代码性能优化总结 5. 三种代理 6. iText操作PDF 7. 解析XML的4种方式 8. 面向对象思想 9 ...

  3. 转载: Java虚拟机:运行时内存数据区域、对象内存分配与访问

    转载:  https://blog.csdn.net/a745233700/article/details/80291694  (虽然大部分内容都其实是深入理解jvm虚拟机这本书里的,不过整理的很牛逼 ...

  4. 安装jrebel并激活

    1.File-Settings-Plugins搜索jrebel,找到JRebel for IntelliJ ,点击install(我这里已经安装过了,所以显示的是更新) 2.重启idea 3.激活步骤 ...

  5. CUDA学习(六)之使用共享内存(shared memory)进行归约求和(M个包含N个线程的线程块)

    在https://www.cnblogs.com/xiaoxiaoyibu/p/11402607.html中介绍了使用一个包含N个线程的线程块和共享内存进行数组归约求和, 基本思路: 定义M个包含N个 ...

  6. Spring的aop思想

    1.AOP思想 (1)在解决中文乱码的应用: 一般情况下如果在Servlet中要解决中文乱码问题需要在每一个Servlet中书写解决乱码的代码,但是,在运用了过滤器之后,就不再需要每一个Servlet ...

  7. FFMPEG学习----遍历所支持的封装格式

    #include <stdio.h> extern "C" { #include "libavformat/avformat.h" }; int m ...

  8. tensorflow feed_dict()

    import tensorflow as tf a=tf.Variable(100) b=tf.Variable(200) c=tf.Variable(300) update1=tf.assign(c ...

  9. C++中STL库函数的基本运用

    学了这么长时间的STL库,现在我觉得是有必要对过去的题目和所遇到的问题做一下整理了,以便于之后更好的展开练习: 一. 为什么要用STL库? 1.简单粗暴(省事). 2.便于解决复杂的问题(在贪心题目中 ...

  10. QTableWidget中添加列表并输出

    注意:这只是一个demo,项目中用到利用QTableWidget创建表,表中包含各种控件,最后保存表中的内容到doc中,此demo完成了QTableWidget中表的创建,以及将表中内容转为字符串格式 ...