发表于: 2020-08-31 23:48:29

1 1545


今天完成的事:

限制一个用户24小时之内只能生成5条验证码,根据失效时间来限制同一用户的发送频率。


/**
    * 封装发送邮箱验证码的方法
    * @param  mail
    * @param map
    */
   public void sendMailCode(final String mail, Map<String,Object> map){
//判断今天是不是首次登录
       if (redisService.get("count" + mail) == null) {
redisService.set("count" + mail, "5", 60 * 60 * 24);
           //生成验证码,加到redis.设置失效时间为2分钟。
           String verify = getCode();
           //发送*********
           sendMail(mail,verify);
           System.out.println("验证码是:" + verify);
           redisService.set(mail, verify, 5);
           map.put("msg", "验证码发送成功,还可以发送" + redisService.get("count"+mail) + "");
       } else {

//过期时间
           long expire = redisService.getExpire(mail);
           System.out.println("失效时间:---" + expire);
           if (redisService.get(mail) == null) {
int count = Integer.parseInt((String) redisService.get("count" + mail));
               //判断今天还有没有剩余发送次数和间隔时间
               if (count > 0) {
//生成验证码,加到redis.设置失效时间为2分钟。
                   String verify = getCode();
                   //发送*********
//                    sendMail(mail,verify);
                   System.out.println("验证码是:" + verify);
                   redisService.set(mail, verify, 5);
                   //可发送次数-1
                   redisService.decr("count" + mail, 1);
                   map.put("msg", "验证码发送成功,还可以发送" + count + "");
               } else {
logger.info(mail+ "====今天的发送验证码次数已使用完");
                   map.put("msg", "今天的发送次数已经用完");
               }
} else {
map.put("msg", "请隔" + expire + "秒再发送");
           }
}
}

明天的计划:

跑通注册和登录流程。 

遇到的问题:

写这个功能的时候,逻辑比较乱,删改了很多次。 

收获:

代码逻辑要理清楚再动手。


返回列表 返回列表
评论

    分享到