实现登录密码输入错误次数过多,锁定用户账号,前台可以进行解锁的业务(未完善版本)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、前台实现解锁
  • 二、后台逻辑实现
  • 二、步骤
    • 1.数据库
    • 2.代码实现


前言

工作的第一天,就接到了一个登录锁定与解锁的需求,第一反应,这是什么,我要怎么做,怎么上来就让我写这么难的业务,哈哈。不过万物皆可百度,经过观看网上大佬们的实现方法,经过本人cop.,经过本人的借鉴,满足了需求,直接上代码吧。


一、前台实现解锁

前台就是加了个按钮,可以点击进行事件触发,把锁定的状态给它放开咯
在这里插入图片描述前端不描述太多(本人前端太菜了,怕打脸( ̄ε(# ̄)☆╰╮( ̄▽ ̄///))

二、后台逻辑实现

首先就要梳理清业务的完整流程,既然是登录锁定,登录输入密码就会有两种情况,输入正确和不正确。先讨论正确时会有哪些情况,账号被锁定和未锁定,没有锁定直接进入系统,锁定的时候就要拦截不允许登录了;下边就是密码不正确,大前提肯定是不能登录,然后考虑锁定的状况,如果账号已经锁着了,那就还锁着(后续考虑改进一下,可以经过三十分钟或者一个小时,让其自动解锁),没有锁,进行错误次数增加,达到你规定的错误次数,进行锁定。
大致逻辑是这样

二、步骤

1.数据库

本人实现这个功能,在原来数据库表的情况下,增加了三个字段:last_login_error_time(最后一次登录错误时间),login_error_count(登录错误计数),is_locked(是否锁定):

2.代码实现

直接上代码,不玩虚的:

        String nespwd = request.getParameter("nespwd");String code = request.getParameter("code");Person person = personDao.findByUserNameAndaesPassword(personName);if (code.equals(person.getCode())) {return "login";} else {person.setCode(code);personDao.save(person);}if (personName != null && nespwd != null) {Date thisErrorLoginTime = null;        // 修改的本次登陆错误时间Integer islocked = 0;             //定义锁定状态if (person == null) {return "login";} else if (!person.getAesPassword().equals(nespwd)) {if (person.getIsLocked() == null) {person.setIsLocked(0);} else {islocked = person.getIsLocked();}if (person.getLoginErrorCount() == null) {person.setLoginErrorCount(0);}Date date = new Date();SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String dataStr = format.format(date);  //格式化日期try {thisErrorLoginTime = format.parse(dataStr);} catch (ParseException e) {e.printStackTrace();}if (islocked == 1) {Date lastLoginErrorTime = null;Long timeSlot = 0l;if (person.getLastLoginErrorTime() == null) {lastLoginErrorTime = thisErrorLoginTime;} else {lastLoginErrorTime = person.getLastLoginErrorTime();timeSlot = thisErrorLoginTime.getTime() - lastLoginErrorTime.getTime();}if (timeSlot < 1800000) {request.setAttribute("message", "您的账户已被锁定,请" + (30 - Math.ceil((double) timeSlot / 60000)) + "分钟之后再次尝试");try {Thread.currentThread().sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "login";} else {   //用户超过三十分钟,再次输错密码,解锁并且增加次数person.setLastLoginErrorTime(thisErrorLoginTime);//修改用户相当于更新一些信息personDao.updateByperson(thisErrorLoginTime, 1, 0, person.getPersonId());request.setAttribute("message", "账户或密码错误,您还有4次登陆机会");try {Thread.currentThread().sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "login";}// 账户第五次登陆失败  ,此时登陆错误次数增加至5,以后错误仍是5,不再递增} else if (person.getLoginErrorCount() == 4) {person.setLoginErrorCount(5);person.setIsLocked(1);person.setLastLoginErrorTime(thisErrorLoginTime);//修改用户 更新用户信息personDao.updateByperson(thisErrorLoginTime, 5, 1, person.getPersonId());request.setAttribute("message", "您的账户已被锁定,请30分钟之后再次尝试登陆");try {Thread.currentThread().sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "login";} else {                                        // 账户前四次登陆失败person.setLoginErrorCount(person.getLoginErrorCount() + 1);person.setLastLoginErrorTime(thisErrorLoginTime);//修改用户 跟新用户信息personDao.updateByperson(thisErrorLoginTime, person.getLoginErrorCount(), person.getIsLocked(), person.getPersonId());request.setAttribute("message", "账户或密码错误,您还有" + (5 - person.getLoginErrorCount()) + "次登陆机会");try {Thread.currentThread().sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "login";}} else {if (person.getIsLocked() == null) {person.setIsLocked(0);} else {islocked = person.getIsLocked();}if (islocked == 1) {// 最后一次登陆错误时间Date lastLoginErrorTime = null;Long timeSlot = 0L;if (person.getLastLoginErrorTime() == null) {lastLoginErrorTime = new Date();} else {lastLoginErrorTime = person.getLastLoginErrorTime();timeSlot = new Date().getTime() - lastLoginErrorTime.getTime();}if (timeSlot < 1800000) {    // 判断最后锁定时间,30分钟之内继续锁定request.setAttribute("message", "您的账户已被锁定,请" + (30 - Math.ceil((double) timeSlot / 60000)) + "分钟之后再次尝试");try {Thread.currentThread().sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return "login";} else {                                    // 判断最后锁定时间,30分钟之后登陆账户session.setAttribute("person", person);// 保存当前用户Date d = new Date();session.setAttribute("dateStr", d); // 保存当前用户登录时间用于显示person.setLoginErrorCount(0);person.setIsLocked(0);//修改用户表登录时间 跟新表格信息personDao.updateByperson(null, 0, 0, person.getPersonId());return "main";}} else {session.setAttribute("person", person);// 保存当前用户Date d = new Date();session.setAttribute("dateStr", d); // 保存当前用户登录时间用于显示person.setLoginErrorCount(0);person.setIsLocked(0);personDao.updateByperson(null, 0, 0, person.getPersonId());//修改用户表登录时间return "main";}}}return "login";---# 总结
总结:主要借鉴了网上大佬们的逻辑实现,其实还有一个小小的问题,就是没有办法自动更新锁定的状态,过了三十分钟,自动把锁定给解除,得想个办法,写个定时任务?希望大佬给我解惑。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/34167.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

geth如何解锁账户?

2019独角兽企业重金招聘Python工程师标准>>> 默认情况下&#xff0c;你在Geth中的账户是被锁住的&#xff0c;你不能用这些被锁住的账户发送交易&#xff0c;例如转账或调用合约方法。因此如果你需要使用Geth发送交易&#xff0c;就需要先解锁账户。那么&#xff0c…

烽火HG2543C1获得telecomadmin密码以及禁用tr069

因为在网上找不到删除tr069的教程自己摸索半天终于找到方法&#xff0c;特意来此分享一下我的思路 输入 192.168.1.1:8080 进入普通后台然后输入 192.168.1.1:8080/cgi-bin/telnetenable.cgi?telnetenable1 开启telnet 开启cmd输入 telnet 192.168.1.1 &#xff0c;密码是…

Oracle scott账户被锁定问题及更改密码

记录一下出现的问题及解决过程。 登录scott账户&#xff0c;显示被锁定。 1.登录高权限的账户&#xff0c;回车后连接到数据库 2.解锁scott账户 3.更改scott账户密码 &#xff08;注&#xff1a;alter后一定要加user&#xff0c;否则会提示“无效的alter命令”错误&#xff0…

“即玩即赚”“从玩到赚”类游戏所面临的问题及方案

先说我这篇博客的结论&#xff1a;如果你计划推出了一个拥有代币的游戏&#xff0c;并且打算从一开始就让代币与外部加密交易所挂钩&#xff0c;那么事实上&#xff0c;你可能从一开始就已经失败了。 承诺“即玩即赚”&#xff08;我们使用“即玩即赚”而不是“从玩到赚”这个术…

算法学习记录-二叉树的权值

算法学习记录 二叉树的权值 真没想到想到,就这样一道题花了我一上午… 一开始思路比较乱,后来不停的开单步调试,不停的看各种值,不停的想思路和代码是不是一样的,调了一上午最后终于悟出来了. 刚开始的时候只是脑子里能想明白怎么求和, 但是不能写出具体流程就之间写代码了.…

[Java] 自己写图书馆管理系统(详细版)

目录 一、简介 二、需求 三、具体设计 一、大纲 二、分析过程 三、小结 1.整体流程 2.ListBookOrderByXXXCommand 3.匿名类对象语法知识点 4.类和对象&#xff08;面向对象设计&#xff09; 四、完整代码 一、简介 实现一个简单的能对图书馆的书籍进行简单管理的一个…

周易名:传统周易结合现代人工智能起名字

ChatGPT是由OpenAI公司开发的一种自然语言处理&#xff08;NLP&#xff09;模型&#xff0c;它是一种基于Transformer架构的深度学习模型。GPT的全称是Generative Pre-trained Transformer&#xff0c;也就是基于预训练的生成式Transformer模型。 ChatGPT被训练在大规模的文本…

【AIGC】人工智能的新篇章:生成式人工智能对企业的影响和意义

目录 人工智能的新篇章:生成式人工智能对企业的影响和意义

关于计算机网络的好坏处的英语作文,网购的好处和坏处英语作文带翻译

010在线为您甄选多篇描写网购的好处和坏处英语作文带翻译,网购的好处和坏处英语作文带翻译精选,网购的好处和坏处英语作文带翻译大全&#xff0c;有议论&#xff0c;叙事 &#xff0c;想象等形式。文章字数有400字、600字、800字....缓存时间&#xff1a; 2021-07-09 We talked…

计算机的利与弊英语作文带翻译,手机的利与弊带翻译英语作文(通用5篇)

手机的利与弊带翻译英语作文(通用5篇) 在学习、工作、生活中&#xff0c;许多人都有过写作文的经历&#xff0c;对作文都不陌生吧&#xff0c;借助作文人们可以实现文化交流的目的。为了让您在写作文时更加简单方便&#xff0c;下面是小编精心整理的手机的利与弊带翻译英语作文…

太厉害了,竟然用 Python 给英语老师开发了个英语作文批改的神器

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理 原创&#xff1a;TrueDei 想要获取更多Python学习资料了解更多关于Python的知识可以加Q群630390733踊跃发言大家一起来学习讨论吧&#xff01; 由一个家长退群的故事在某…

基于Android的网上订餐系统

网上订餐系统大家肯定都不会陌生&#xff0c;那就废话不多说&#xff0c;直接上干货。 本人大二&#xff0c;刚好这学期需要做Android应用开发的大作业&#xff0c;今天也是刚刚做完演示&#xff0c;想着留着代码可能也不会有什么太大的用处了&#xff0c;就分享出来供大家参考…

完整的外卖系统,手机端 + 后台管理(附源码)

点击上方“逆锋起笔”&#xff0c;公众号回复 编程资源 领取大佬们推荐的学习资料flash-waimai 一个完整的外卖系统&#xff0c;包括手机端&#xff0c;后台管理&#xff0c;api基于spring boot和vue的前后端分离的外卖系统包含完整的手机端&#xff0c;后台管理功能本项目主要…

Android 外卖订餐APP开发

APP展示页面 &#xff1a; 本产品适用范围&#xff1a; 购买便利店系统任何版本&#xff0c;如需进行二次开发&#xff0c;需要单独联系我们队APP进行修改和调试&#xff0c;免收服务费用。本司接收任何定制功能&#xff0c;具体定制费用根据需求另付费。 2016全新生鲜外卖系统…

小程序外卖订单界面的 代码

html页面 . <view class"container"><view class"store-box"><view class"st-bg"></view><view class" flex justify-between store-info"><view class" flex flex-direction justify-start&…

网上订餐管理系统

网上订餐系统的主要功能是在线点餐&#xff0c;除此之外还有比如充值&#xff0c;菜谱管理&#xff0c;退餐&#xff0c;查看历史订单等等众多相关服务。在撰写论文的过程中&#xff0c;将结合理论实际&#xff0c;理清相关理论知识&#xff0c;同时与系统配合以解释实际应用和…

在线订餐管理系统

1、项目介绍 在线订餐管理系统拥有两种角色 管理员&#xff1a;菜品管理、类别管理、用户管理、订单管理、评价用户、留言管理等 用户&#xff1a;登录注册、点餐、购物车、历史订餐、留言 2、项目技术 后端框架&#xff1a; Servlet、mvc模式 前端技术&#xff1a;jsp、…

ChatGPT爆火?团餐行业如何实现智慧升级

最近&#xff0c;《流浪地球2》热映&#xff0c;影片科技感爆棚&#xff0c;画面感震撼&#xff0c;电影中的一些高科技智能设备也令人赞叹&#xff0c;空间站的云霄电梯可以直通空间站&#xff0c;酷炫的“外骨骼机器人能够辅助工程&#xff0c;智能电子狗“笨笨”能干又可爱&…

瑞吉外卖 - 后台系统退出功能(4)

某马瑞吉外卖单体架构项目完整开发文档&#xff0c;基于 Spring Boot 2.7.11 JDK 11。预计 5 月 20 日前更新完成&#xff0c;有需要的胖友记得一键三连&#xff0c;关注主页 “瑞吉外卖” 专栏获取最新文章。 相关资料&#xff1a;https://pan.baidu.com/s/1rO1Vytcp67mcw-PD…

外卖订餐——吃货联盟订餐系统

通过一段时间的学习&#xff0c;也到了检验成果的时候了&#xff0c;下面通过实战提升对技能点的运用能力、积累项目经验。 “吃货联盟定餐系统”需求说明 现今已进入网络时代&#xff0c;网上购物、看新闻、交友等人们的日常生活已离不开网络。“只 要点点手指&#xff0c;就…