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和锁定输错密码锁定账户的更多相关文章

  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. OpenCV2.4.13+Qt5.6.2配置方法

    [1.环境变量] D:\Soft\OpenCV2\MinGW_build\bin; C:\Qt\Qt5.6.2\Tools\mingw492_32\bin; D:\Soft\Programming\C ...

  2. Python中将变量按行写入txt文本中

    案例一: 讲数组a 循环写入名称为2.txt的文档中 # -*-coding:utf8-*- import requests from lxml import etree a=[1,2,3,4,5,6 ...

  3. iOS--->运行程序屏幕上下有黑边

    iOS--->运行程序屏幕上下有黑边 原因是LaunchImage没有设置好,图片等尺寸没有和对应的手机屏幕大小适配导致. 解决方法 就是要增加启动图片,把屏幕拉伸,匹配好每个机型的屏幕大小,这 ...

  4. Kubernetes 服务自动发现CoreDNS

    前言 Service服务,是一个概念,逻辑通过selector标签代理指定后端pod.众所周知,pod生命周期短,状态不稳定,pod错误异常后新生成的Pod IP会发生变化,之前Pod的访问方式均不可 ...

  5. sqlserver 分页模糊查询

       积少成多 ----  仅以此致敬和我一样在慢慢前进的人儿 问题: 在sqlserver 进行模糊查询,出现问题 最初使用“concat”,进行拼串操作,如下所示: <select id = ...

  6. Spring IoC 容器和 bean 对象

    程序的耦合性: 耦合性(Coupling),又叫耦合度,是对模块间关联程度的度量.耦合的强弱取决于模块间接口的复杂性.调用模块的方式以及通过界面传送数据的多少.模块间的耦合度是指模块之间的依赖关系,包 ...

  7. 实验16:ACL

    实验13-1:标准ACL Ø    实验目的通过本实验可以掌握:(1)ACL 设计原则和工作过程(2)定义标准ACL(3)应用ACL(4)标准ACL 调试 Ø    拓扑结构 本实验拒绝PC1 所在网 ...

  8. 实验2: CDP命令操作

    基本命令 1.获设备的相邻信息:CDP CDP1.不管上层协议 能够获取的信息包括:1.设备名2.对应各协议的地址3.端口名4.角色特征5.平台 全局启用/关闭CDP:cdp run/no cdp r ...

  9. 利用Atomic, ThreadLocal, 模仿AQS, ReentrantLock

    /** * @description 队列同步器,利用原子整形模仿AQS,非公平锁(简单自适应自旋) * @since 2020/2/4 */ public class QueueSynchroniz ...

  10. HDU_2510_打表

    http://acm.hdu.edu.cn/showproblem.php?pid=2510 dfs打表. #include<iostream> #include<cstdio> ...