@Controller
@RequestMapping("/login")
public class LoginController extends BaseController{
    @Autowired
    private LoginService loginService;
    private static Integer ERRORCOUNT = 0; //输入的错误密码次数
    private static Integer LOGINNUM = 0;
    @RequestMapping(params = "login")
    @ResponseBody
    public AjaxJson login(HttpServletRequest request,HttpServletResponse response){
        HttpSession session=request.getSession();
        AjaxJson ajax=new AjaxJson();
        String message="";
        String username=StringEscapeUtils.escapeHtml(request.getParameter("username"));
        String logincode=StringEscapeUtils.escapeHtml(request.getParameter("logincode"));
        String type=StringEscapeUtils.escapeHtml(request.getParameter("type")); //是否需要输入验证码
        CustomerRegtn customer=null;
        if("hide".equals(type)){ //不需要验证码
            
            
        }else if("show".equals(type)){ //需要输入验证码
            HttpSession randCodeSession=request.getSession();
            String randCode=(String) randCodeSession.getAttribute("randCode");
            if(randCode !=null){  //验证码不为空
                if(!randCode.equalsIgnoreCase(request.getParameter("yzmval"))){ //验证码匹配
                    message=AjaxJson.RANDCODEERROR;
                }else{ //验证码匹配上了
                    if(username !=null){
                        customer=loginService.loadCustomer(username);
                        if(customer !=null){  //用户存在
                            if(logincode != null){
                                byte[] salt = PasswordUtil.getStaticSalt();
                                String ciphertext = PasswordUtil.encrypt(username, logincode, salt); //加密
                                if(ciphertext.equals(customer.getLoginpassword())){ //对比,匹配成功
                                    customer.setLoginnum(LOGINNUM+1);
                                    loginService.updateCustomerRegtn(customer); //登陆次数加一
                                    message=AjaxJson.SUCCESS;
                                    ERRORCOUNT=0;
                                }else{ //密码匹配不成功
                                    if(session.getAttribute(username) != null){
                                        ERRORCOUNT=ERRORCOUNT+1;
                                    }else{
                                        ERRORCOUNT=0;
                                    }
                                    message=AjaxJson.ERROR;
                                }
                            }
                        }else{
                            if(session.getAttribute(username) != null){
                                ERRORCOUNT=ERRORCOUNT+1;
                            }else{
                                ERRORCOUNT=0;
                            }
                            message=AjaxJson.ERROR;
                        }
                    }else{ //用户名为空
                        if(session.getAttribute(username) != null){
                            ERRORCOUNT=ERRORCOUNT+1;
                        }else{
                            ERRORCOUNT=0;
                        }
                        message=AjaxJson.ERROR;
                    }
                }
            }
        }
        
        
        session.setAttribute(username, ERRORCOUNT);//绑定session
        ajax.setMsg(message);
        Integer count=(Integer) session.getAttribute(username);
        ajax.setErrorCount(count);
        session.setMaxInactiveInterval(6000);
        return ajax;
    }
}

页面:

<div class="login-main">
                    <p>
                        
                    </p>
                    <div class="user">
                        <img src="/resource/p_w_picpaths/user.png">
                        <input class="user-name" type="text" placeholder="请录入用户名">
                    </div>

<div class="code">
                        <img src="/resource/p_w_picpaths/code.png">
                        <input class="logincode" type="text" placeholder="请录入密码">
                    </div>

<div class="codeyzm" style="display: none">
                        <img src="/resource/p_w_picpaths/code.png">
                        <input class="yzmcode" type="text" placeholder="请录入校验码">
                        <img id="changeyzmid" src="/randCodeImage"  />
                    </div>

<input class="login-btn" type="submit" value="登录">
                    <div class="login-bottom">
                        <a href="#" class="zhuce">免费注册</a>
                        <a href="#" class="wangji">忘记密码</a>
                    </div>
                </div>

<script type="text/javascript">

$(".login-btn").click(function() {
    var username = $(".user-name").val();
    var logincode = $(".logincode").val();
    var yzmval = $(".yzmcode").val();
    var tzurl = "http://www.baidu.com";
    if (username == '' || username.length < 0) {
        alert("用户名不能为空");
        return false;
    } else if (logincode == '' || logincode.length < 0) {
        alert("密码不能为空");
        return false;
    }

if ($(".yzmcode").is(":visible") == false) {
        $.ajax( {
            url : "/login.do?login",
            data : {
                'username' : username,
                'logincode' : logincode,
                'yzmval' : yzmval,
                'type':'hide'
            },
            async : false,
            type : "GET",
            contentType : "application/json",
            dataType : "json",
            success : function(data) {
                var d = eval(data);
                var tt = 5 - d.errorCount;
                if (d.msg == "success") {
                    window.location.href = tzurl;
                } else if (d.msg == "error") {
                    if(tt <= 0){
                        alert("用户名和密码不匹配,请输入验证码");
                    }else{
                        alert("用户名和密码不匹配,还有" + tt + "机会");
                    }
                    if (d.errorCount + 1 > 5) {
                        $(".codeyzm").attr("style", "display:block");
                    }
                }else if(d.msg =='randcodeerror'){
                    alert("验证码错误");
                }
            },
            complete : function(XMLHttpRequest, textStatus) {
                
            }
        });
    } else { //验证码显示
        if (yzmval == '' || yzmval.length < 0) {
            alert("验证码不能为空");
            return false;
        }        
            $.ajax( {
            url : "/login.do?login",
            data : {
                'username' : username,
                'logincode' : logincode,
                'yzmval' : yzmval,
                'type':'show'
            },
            async : false,
            type : "GET",
            contentType : "application/json",
            dataType : "json",
            success : function(data) {
                var d = eval(data);
                if (d.msg == "success") {
                    window.location.href = tzurl;
                } else if (d.msg == "error") {
                    alert("用户名和密码不匹配");
                }else if(d.msg =='randcodeerror'){
                    alert("验证码错误");
                }
            },
            complete : function(XMLHttpRequest, textStatus) {
                
            }
        });
    }
});

function changeyzm() {
    $("#changeyzmid").attr("src", "/randCodeImage?i=" + Math.random());
}
</script>

转载于:https://blog.51cto.com/xuliangjun/1598818

随笔-通过session判断用户密码输入错误三次,输入验证码相关推荐

  1. python输入错误提示再次输入_Python实现用户登录并且输入错误三次后锁定该用户...

    实现用户登录并且输入错误三次后锁定该用户 我的测试环境,win7,python3.5.1 提示输入用户名,和密码 判断是否被锁定 判断用户名和密码是否匹配 输入错误三次,账号被锁定 思路 代码块 na ...

  2. 给定一个用户,获取其密码警告期限;而后判断用户密码使用期限是否已经小于警告期限...

    if 给定一个用户,获取其密码警告期限:而后判断用户密码使用期限是否已经小于警告期限:    提示:计算方法,最长使用期限减去已经使用的天数即为剩余使用期限:    如果小于,则显示"War ...

  3. 在ASP.NET中怎么用SESSION判断用户是否登录

    代码很简单的,我把我平时写过的贴出来给大家看看: if (bResult == true)   //登录的用户名和密码正确     {      //保存登录的用户名      Session[&qu ...

  4. html怎么做密码的判断,用户密码格式判断 .html

    用户密码格式判断 input { margin: 20px ; width: 300px; height: 50px; text-indent: 20px; font-size: 24px; } sp ...

  5. python 自动输入用户密码_Linux中Python自动输入sudo 密码

    一.背景和需求 背景: 由于docker服务进程都是以root帐号的身份运行的,所以用docker跑abpred出来的文件所有者都是root, 而我作为一般用户,操作这个文件不够权限,运行代码时需要s ...

  6. Python 用while 实现循环 到特定条件退出循环(input 输入错误之后重新输入)

    代码很简单如下: ##!/usr/bin/python3 i =0 while True:sex = input("Please input your sex (boy or girl):& ...

  7. 验证码输入错误怎么再次刷新验证码

    利用jQuery的prop()函数获取src属性的值,向Servlet发出请求的时候加一个随机数,保证每次都是不同的请求 <script type="text/javascript&q ...

  8. jQuery 验证码输入错误后自动刷新验证码 点击验证码图片刷新验证码

    利用jQuery的attr()函数,向Servlet发出请求的时候加一个随机数, 保证每次都是不同的请求 $('#imgVcode').attr("src","/veri ...

  9. python输入用户名密码、三次输入失败、退出程序_Python3练习-输入用户名输入三次错误即锁定该用户,提示登录失败...

    介绍一下会用到的一些内容 Python3打开.读取和关闭文件的方法 1 file = open('D:\passwd.txt','r') #打开文件 2 content = file.readline ...

最新文章

  1. Spring Cache抽象-缓存注解
  2. 【OpenYurt 深度解析】边缘网关缓存能力的优雅实现
  3. 如何在Amazon AWS上设置一台Linux服务器
  4. hdu 2824The Euler function
  5. 刚刚开源的Python静态类型检查器:Pyright
  6. 详解分布式协调服务 ZooKeeper
  7. Linux链接文件包括,Linux操作系统——系统各目录有什么作用、以及文件链接过程...
  8. html5下input的placeholder标签兼容ie9
  9. 揭秘基于MBSE集成化的汽车电子解决方案
  10. TensorFlow model
  11. 计算机基础线性代数还有,大学计算机基础 word作业.doc
  12. linux函数 取值溢出,Linux eCryptfs工具parse_tag_3_packet()函数堆溢出漏洞
  13. 提交太多oracle,急!!请教 用文本域向数据库oracle提交不了太多文字如何解决??...
  14. SPI协议详解(图文并茂+超详细)
  15. MSP430单片机与SIM800A调试
  16. linux 搜狗拼音 自动隐藏状态栏
  17. 手机Vbus上防护用OVP简介
  18. sql注入bypass方法
  19. pyspark中RDD基本操作
  20. 疫情后北上广深租房价格跌了吗? | Alfred数据室

热门文章

  1. php elasticsearch ik,elasticsearch 中文分词(elasticsearch-analysis-ik)安装
  2. python中while嵌套循环_python中的while循环
  3. c语言英汉互译编程,用C语言编辑简单英汉互译词典.doc
  4. 申报成功后怎样修改_每日分享|电子税务局操作指引之更正错误申报
  5. php 为什么定义常量,php-将预定义常量定义为什么
  6. charles 代理手机连不上网_手机连不上网?四种方法教你如何解决,建议收藏以备不时之需...
  7. java retentionpolicy_Java注解之如何利用RetentionPolicy.SOURCE生存周期
  8. struts2漏洞监测_Apache Shiro身份验证绕过漏洞风险提示
  9. html广告位代码,一段CSS代码让你的广告位“立起来”
  10. mysql40190_MySQL 内核深度优化