C#实现的Check Password和锁定输错密码锁定账户
C#实现的Check Password,并根据输错密码的次数分情况锁定账户:如果输入错误3次,登录账户锁定5分钟并提示X点X分后重试登录。如果5分钟后再次输入,累计输入错误密码累计达到5次。则账户会被永久锁定,需联系系统管理员进行把数据库中的输入错误的次数(errorcount)进行清零解锁才能登陆。实现代码如下:
- 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 < )
- {
- execRes.Status = false;
- execRes.Message = "无效的账号。";
- }
- else
- {
- UserInfo1 info1 = null;
- execRes = CallEEPMethod.Execute(dbName, "sDEM2131", "GetUserInfo", strs[].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 != )
- {
- //int errorCount
- DateTime dt0 = DateTime.Now;
- DateTime dt1 = errtime.AddMinutes();
- double s = (dt1 - dt0).TotalSeconds;
- if (errcount == && s > )
- {
- execRes.Status = false;
- execRes.Message = "密码连续输入错误3次,请于 " + errtime.AddMinutes(+).ToString("yyyy-MM-dd HH:mm:ss") + " 之后重试,thanks!";
- }
- else
- {
- if (CheckFromLDAP(strs[], password, strs[]))
- {
- CPU.Models.UserInfo userInfo = CheckUser(strs[]);
- if (userInfo == null)
- {
- execRes.Status = false;
- execRes.Message = "您没有权限操作此系统!";
- }
- else
- {
- execRes.Status = true;
- execRes.Anything = userInfo;
- //error count 清0
- CallEEPMethod.Execute(dbName, "sDEM2131", "UpdateUserLoginError", strs[].ToLower() + ","+"" + "," + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
- }
- }
- else
- {
- execRes.Status = false;
- // 次数+1
- if (errcount + > )
- execRes.Message = "密码连续输入错误" + (errcount+).ToString() + "次。密码连续输错5次将锁定!";
- else
- execRes.Message = "密码输入错误!";
- dt0 = DateTime.Now;
- CallEEPMethod.Execute(dbName, "sDEM2131", "UpdateUserLoginError", strs[].ToLower() + "," + (errcount + ).ToString()+"," + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"));
- if (errcount + == )
- execRes.Message = "密码连续输入错误" + (errcount + ).ToString() + "次,请于 " + dt0.AddMinutes().ToString("yyyy-MM-dd HH:mm:ss") + " 之后重试,thanks!";
- if (errcount + == )
- 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验证
- 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 > )
- {
- //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;
- }
根据不同的用户登录进行权限管理
- 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和锁定输错密码锁定账户的更多相关文章
- 输错密码?这个 sudo 会“嘲讽”你
导读 你在 Linux 终端中会有很多的乐趣.我今天要讲的不是在终端中跑火车.我今天要讲的技巧可以放松你的心情.你学习过如何在命令行中增加 sudo 命令的超时,今天的文章中,我会向你展示如何让 su ...
- pycharm使用gitlab输错密码解决办法
在pycharm中使用http方式连接gitlab,在测试连接的时候提示输入用户名,密码.密码输错后,以后的每次test都是使用错误的密码,在删除pycharm后也是一样,解决方法是在控制面板\用户帐 ...
- windows中git输错密码后不能修改问题
坑位 当使用git做代码管理的时候,如果仓库地址地选用的是https,在初始拉取代码时,需要输入账号和密码,如果不小心输错了,后续一直会验证失败,无法再重新更正账号信息 Why 因为git为了不让你每 ...
- windows中git输错密码后不能重新输入的问题
当输入密码错误后,git会把密码保存在windows的你的当前用户名的缓存中. 我们可以在控制面板中寻找到这个缓存,再删掉就可以了. 首先,打开“控制面板”,把“查看方式”改为“大图标”,再打开“用户 ...
- python作业设计:输入用户名密码,认证成功后显示欢迎信息,输错三次后锁定
作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3.判 ...
- python学习-实现用户密码登录,输错三次锁定
作业需求: 输入用户名密码 认证成功后显示欢迎信息 输错三次后锁定 实现思路: 判断用户是否在黑名单,若在黑名单,则将用户锁定 判断用户是否存在,若不存在,提示用户不存在 若用户存在,判断登录密码是否 ...
- python3 登录验证小程序,同一用户输错三次密码,锁定账户
''' 让用户输入用户名密码 认证成功后显示欢迎信息用户3次认证失败后,退出程序,再次启动程序尝试登录时,还是锁定状态''' # !/usr/bin/env python # -*- coding:u ...
- Python3.5 Day1作业:实现用户密码登录,输错三次锁定。
作业需求: 1.输入用户名密码 2.认证成功后显示欢迎信息 3.输错三次后锁定 实现思路: 1.判断用户是否在黑名单,如果在黑名单提示账号锁定. 2.判断用户是否存在,如果不存在提示账号不存在. 3. ...
- python 循环和file操作实现用户密码输错三次将用户锁定
一.需求编写登录接口1.输入用户名密码2.认证成功后显示欢迎信息3.输错三次后锁定 二.简单思路登录,三次密码输入错误锁定用户1.用户信息文件:存放用户名和密码2.黑名单文件:将输入三次错误的用户加入 ...
随机推荐
- xhsell关闭jupyter仍然运行的命令
nohup jupyter notebook & nohup 和 &都是linux的命令 1.& 当在前台运行某个作业时,终端被该作业占据:可以在命令后面加上& 实现后 ...
- Java博客专栏
1. Java23种设计模式 2. JVM虚拟机 3. 设计模式6大原则 4. Java代码性能优化总结 5. 三种代理 6. iText操作PDF 7. 解析XML的4种方式 8. 面向对象思想 9 ...
- 转载: Java虚拟机:运行时内存数据区域、对象内存分配与访问
转载: https://blog.csdn.net/a745233700/article/details/80291694 (虽然大部分内容都其实是深入理解jvm虚拟机这本书里的,不过整理的很牛逼 ...
- 安装jrebel并激活
1.File-Settings-Plugins搜索jrebel,找到JRebel for IntelliJ ,点击install(我这里已经安装过了,所以显示的是更新) 2.重启idea 3.激活步骤 ...
- CUDA学习(六)之使用共享内存(shared memory)进行归约求和(M个包含N个线程的线程块)
在https://www.cnblogs.com/xiaoxiaoyibu/p/11402607.html中介绍了使用一个包含N个线程的线程块和共享内存进行数组归约求和, 基本思路: 定义M个包含N个 ...
- Spring的aop思想
1.AOP思想 (1)在解决中文乱码的应用: 一般情况下如果在Servlet中要解决中文乱码问题需要在每一个Servlet中书写解决乱码的代码,但是,在运用了过滤器之后,就不再需要每一个Servlet ...
- FFMPEG学习----遍历所支持的封装格式
#include <stdio.h> extern "C" { #include "libavformat/avformat.h" }; int m ...
- tensorflow feed_dict()
import tensorflow as tf a=tf.Variable(100) b=tf.Variable(200) c=tf.Variable(300) update1=tf.assign(c ...
- C++中STL库函数的基本运用
学了这么长时间的STL库,现在我觉得是有必要对过去的题目和所遇到的问题做一下整理了,以便于之后更好的展开练习: 一. 为什么要用STL库? 1.简单粗暴(省事). 2.便于解决复杂的问题(在贪心题目中 ...
- QTableWidget中添加列表并输出
注意:这只是一个demo,项目中用到利用QTableWidget创建表,表中包含各种控件,最后保存表中的内容到doc中,此demo完成了QTableWidget中表的创建,以及将表中内容转为字符串格式 ...