C#实现Check Password和锁定输错密码锁定账户功能
作者:農碼一生 发布时间:2023-01-20 03:04:33
标签: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 < 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验证
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;
}
根据不同的用户登录进行权限管理
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和锁定输错密码锁定账户功能网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
来源:https://www.cnblogs.com/wml-it/archive/2020/01/17/12205676.html
0
投稿
猜你喜欢
- 这篇文章主要介绍了如何使用java修改文件所有者及其权限,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的
- Spring bean配置单例或多例模式单例spring bean 默认是单例默认,在对应.xml文件中的配置是:<bean id=&
- 在程序中对文件进行压缩解压缩是很重要的功能,不仅能减小文件的体积,还能对文件起到保护作用。如果是生成用户可以下载的文件,还可以极大的减少网络
- Interval操作符:用于创建Observable,跟TimerTask类似,用于周期性发送信息,是一个可以指定线程的TimerTask首
- 解析:CLR支持两种类型:值类型和引用类型。用Jeffrey Richter(《CLR via C#》作者)的话来说,“不理解引用类型和值类
- 本文实例为大家分享了java使用poi导出图片到Excel的具体代码,供大家参考,具体内容如下代码实现Controller/** * 导出志
- 按照官方文档进行的配置:快速开始|mybatis-plus引入依赖:<!-- 引入mybatisPlus --> &
- 在微信公众号里面需要上传头像,时间比较紧,调用学习jssdk并使用 来不及 就用了input1、使用input:file标签, 去调用系统默
- 摘要空指针异常(NullPointerException)可以说是Java程序员最容易遇到的问题了,影响说大不大,说小也不小。为了解决这个问
- 本文实例讲述了Android开发之文件操作。分享给大家供大家参考,具体如下:目前,几乎所有的设备都会涉及到文件的操作,例如什么电脑,手机等设
- 摘要 想必大家对小榕时光等扫描器都非常熟悉了,有没有自己写一个的冲动。最近微软推实施了.NET战略方案,C#是主推语言,你们是否
- 本文实例讲述了java实现列表、集合与数组之间转化的方法。分享给大家供大家参考。具体实现方法如下:package test; i
- 最近过年发红包拜年成为一种新的潮流,作为程序猿对算法的好奇远远要大于对红包的好奇,这里介绍一种自己想到的一种随机红包分配策略,还请大家多多指
- 阅读目录:基础Socket编程多线程并发阻塞式同步IO基础在现今软件开发中,网络编程是非常重要的一部分,本文简要介绍下网络编程的概念和实践。
- 解决方案1:禁用缓存,前一次使用的方法,在电脑上各浏览器都没问题,但在ipad、安卓手机上仍有问题解决方案2:禁用浏览器后退键 javasc
- 具体代码如下所示;<!-- 第一种打包方式 (maven-jar-plugin), 将依赖包和配置文件放到jar包外 -->&l
- 本文实例为大家分享了Android SurfaceView画板操作的具体代码,供大家参考,具体内容如下画板—&m
- 引言你在服务端的安全管理使用了 Spring Security,用户登录成功之后,Spring Security 帮你把用户信息保存在 Se
- Note:这篇文章是基于Android Studio 3.01版本的,NDK是R16。step1:创建一个包含C++的项目其他默认就可以了。
- Ribbon是Spring Cloud Netflix全家桶中负责负载均衡的组件,它是一组类库的集合。通过Ribbon,程序员能在不涉及到具