- 資訊首頁(yè) > 開(kāi)發(fā)技術(shù) >
- C#如何實(shí)現CheckPassword和鎖定輸錯密碼鎖定賬戶(hù)功
小編給大家分享一下C#如何實(shí)現CheckPassword和鎖定輸錯密碼鎖定賬戶(hù)功能,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
C#實(shí)現的Check Password,并根據輸錯密碼的次數分情況鎖定賬戶(hù):如果輸入錯誤3次,登錄賬戶(hù)鎖定5分鐘并提示X點(diǎn)X分后重試登錄。如果5分鐘后再次輸入,累計輸入錯誤密碼累計達到5次。則賬戶(hù)會(huì )被永久鎖定,需聯(lián)系系統管理員進(jìn)行把數據庫中的輸入錯誤的次數(errorcount)進(jìn)行清零解鎖才能登陸。實(shí)現代碼如下:
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 = "無(wú)效的賬號。"; } 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 = "您沒(méi)有權限操作此系統!"; } 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次,已鎖定!請聯(lián)系管理員解鎖,thanks!"; } } } else { execRes.Status = false; execRes.Message = "賬號密碼連續輸入錯誤5次,已鎖定!請聯(lián)系管理員解鎖,thanks!"; } } else { execRes.Status = false; execRes.Message = "找不到此賬號,請重新輸入!"; } } else { execRes.Status = false; execRes.Message = "找不到此賬號,請重新輸入!"; } } return execRes; }
根據登錄不同的網(wǎng)域進(jìn)行Form驗證
private bool CheckFromLDAP(string ntID, string ntPWD, string domain)//根據登錄的不同網(wǎng)域進(jìn)行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; }
根據不同的用戶(hù)登錄進(jìn)行權限管理
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; }
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自互聯(lián)網(wǎng)轉載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權請聯(lián)系QQ:712375056 進(jìn)行舉報,并提供相關(guān)證據,一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容。
Copyright ? 2009-2021 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 珠海市特網(wǎng)科技有限公司 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站