验证码的获取与验证

一、验证码的获取(将相关内容存在session中);

public class SendValidMsg extends HttpServlet {

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 如果不存在 session 会话,则创建一个 session 对象
        HttpSession session = req.getSession(true);

        String phoneNum = req.getParameter("phone");
        String validCode = "";

        int times = 0;
        String msg = "";
        boolean sendflag = true;
        validCode = StringUtil.getStr(session.getAttribute("validcode" + phoneNum));
        times = NumberUtil.getIntegerValue(session.getAttribute("times" + phoneNum));
        if (times == 3) {
            msg = "您已超过最多重发次数限制!";
            sendflag = false;
        } else if (times > 3) {
            msg = "验证码已失效!";
            sendflag = false;
        } else {
            msg = "验证码发送成功!";
        }
        times += 1;
        if (validCode.equals("")) {
            validCode = StringUtil.getRandNum(4);//获取4位随机数
        }
        session.setAttribute("validcode" + phoneNum, validCode);
        session.setAttribute("times" + phoneNum, times);
        session.setAttribute("sendtime" + phoneNum, DateUtil.date2Str(new Date(), "yyyy-MM-dd HH:mm:ss"));

        if (sendflag) {
            MessageClient.sendMessage(phoneNum, "尊敬的用户您的验证码:" + validCode + ",请在5分钟内使用。回复TD退订。");
        }

        JSONObject resultObj = new JSONObject();
        resultObj.put("msg", msg);
        resultObj.put("success", true);
        try {
            resp.setContentType("application/x-json");
            resp.setCharacterEncoding("UTF-8");
            PrintWriter out = resp.getWriter();
            out.write(resultObj.toJSONString());
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

二、验证。

public class ValidMsg extends HttpServlet {

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // 如果不存在 session 会话,则创建一个 session 对象
        HttpSession session = req.getSession(true);

        String validCode = "";
        String phoneNum = req.getParameter("phone");
        int times = 0;
        String msg = "";
        String validCode1 = "";
        validCode = StringUtil.getStr(session.getAttribute("validcode" + phoneNum)); //存在session中的验证码
        times = NumberUtil.getIntegerValue(session.getAttribute("times" + phoneNum)); //发送次数,发送3次以上验证码失效。
        int validTimes = 0;
        Long intervalTime = (long) 0;
        validTimes = NumberUtil.getIntegerValue(session.getAttribute("validtimes" + phoneNum)); //验证次数,错误验证5次以上验证码失效。
        Date now = new Date();   //当前时间
        Date sendTime = DateUtil.getDate(StringUtil.getStr(session.getAttribute("sendtime" + phoneNum)), "yyyy-MM-dd HH:mm:ss"); //从session中取验证码发送时间
        if (sendTime != null) {
            intervalTime = now.getTime() - sendTime.getTime();
        }
        boolean validflag = false;   //是否验证通过
        if (times > 3 || intervalTime > 5 * 60 * 1000 || validTimes > 5) {
            msg = "验证码已失效,请重新打开浏览器再次注册!";
        } else {
            validCode1 = req.getParameter("validcode");   //输入的验证码
            if (validCode1.toLowerCase().equals(validCode.toLowerCase()) && !validCode.toLowerCase().equals("")) {
                //msg = "验证通过!";
                validflag = true;
            } else {
                msg = "验证码输入错误!";
                validTimes += 1;
                session.setAttribute("validtimes" + phoneNum, validTimes);
            }
        }

        JSONObject resultObj = new JSONObject();
        resultObj.put("msg", msg);
        resultObj.put("validflag", validflag);
        resultObj.put("success", true);
        try {
            resp.setContentType("application/x-json");
            resp.setCharacterEncoding("UTF-8");
            PrintWriter out = resp.getWriter();
            out.write(resultObj.toJSONString());
            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

转载于:https://www.cnblogs.com/sjshare/p/5477601.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值