做美食介绍的网站,wordpress权限代码,电商网站怎么做的,国外代码开源网站防刷发送短信验证码接口的五种简单好用方法#xff0c;绝对够用 前端增加图形验证码#xff0c;点击发送按钮后增加60s倒计时#xff0c;60s后才可以再次点击 后端对接口次数校验#xff0c;60s内同一电话号码只能发送一次 // 生成基于电话号码的重试锁定键
String repeat…防刷发送短信验证码接口的五种简单好用方法绝对够用 前端增加图形验证码点击发送按钮后增加60s倒计时60s后才可以再次点击 后端对接口次数校验60s内同一电话号码只能发送一次 // 生成基于电话号码的重试锁定键
String repeatLock StringUtils.join(send_sms:, mobile);// 使用 Redis 的 setIfAbsent 进行原子性操作尝试设置键值对如果键已存在则返回 false
if (!redisTemplate.opsForValue().setIfAbsent(repeatLock, locked, 60, TimeUnit.SECONDS)) {// 键已存在表示1分钟内已经发送过短信LOGGER.error(60s内不能重复调用发送短信功能: {}, mobile);throw new RuntimeException(调用发送验证码过于频繁请稍后再试);
}后端增加每天次数校验每个电话号码每天只能发送50次 private static final int MAX_DAILY_SMS 50; // 每日最大短信发送数量// 获取当前日期作为短信发送统计的键
String dailySmsKey getDailySmsCountKey(LocalDate.now(),mobile);// 检查每日短信发送数量是否超出限制
long currentDaySmsCount redisTemplate.opsForValue().increment(dailySmsKey,1);//设置过期时间为当天23:59:59
LocalDateTime todayEnd LocalDateTime.of(LocalDate.now(), LocalTime.of(23, 59, 59));
long secondsUntilMidnight ChronoUnit.SECONDS.between(LocalDateTime.now(), todayEnd);
redisTemplate.expire(dailySmsKey, secondsUntilMidnight, TimeUnit.SECONDS);
if (currentDaySmsCount MAX_DAILY_SMS) {LOGGER.error(今日短信发送已达上限无法再发送给 {}, mobile);throw new RuntimeException(当日短信发送已达上限无法再发送请明日再试);
}private String getDailySmsCountKey(LocalDate date,String mobile) {return sms_daily_count: mobile date.format(DateTimeFormatter.ofPattern(yyyy-MM-dd));}对每日超过50次的ip记录下来也可以加入黑名单下次判断请求ip为黑名单中的ip则直接返回失败 前后端增加一个对称加密的校验码 准备密钥 1234abcd约定明文中必须包含指定字符串miyao1234 1.前端调用发送短信接口前通过密钥1234abcd与加密算法将miyao123416位英文字母与数字字符串 例如miyao1234wgly1noKSXg47Mn6 进行加密 生成校验码 vBOLxJj3wl1IyJNUcXOPvaeXvgLZK0b4f3D4J6k9DvE 2.前端调用发送短信接口时将校验码传递给后端 3.后端接收到后对校验码进行解密如果解密失败提示失败 4.如果解密后不包含约定字符串miyao1234 提示失败 5.如果解密后包含约定字符串miyao1234则通过校验此时注意⚠️需要将此校验码存入redis下次如果有相同校验码 则提示重复 /*** 解密后的验证码必须包含此值*/public static final String ENCRYPT_KEY_MAIN_WORD miyao1234;//密钥1234abcdpublic static final String encryptKey 1234abcd;Validate.notBlank(keyDecrypt,发送短信时,校验码不能为空);
//进行解密
String decrypt this.decrypt(keyDecrypt);
LOGGER.error(发送验证码解密后的校验码decrypt);
if(StringUtils.isEmpty(decrypt) || !decrypt.contains(ENCRYPT_KEY_MAIN_WORD)){throw new RuntimeException(发送验证码校验失败);
}
//设置过期时间为当天23:59:59
// 每个校验码每天只能重复使用一次
String repeatLock StringUtils.join(decrypt_send_sms:, decrypt);
LocalDateTime todayEnd LocalDateTime.of(LocalDate.now(), LocalTime.of(23, 59, 59));
long secondsUntilMidnight ChronoUnit.SECONDS.between(LocalDateTime.now(), todayEnd);
// 使用 Redis 的 setIfAbsent 进行原子性操作尝试设置键值对如果键已存在则返回 false
if (!redisTemplate.opsForValue().setIfAbsent(repeatLock, locked, secondsUntilMidnight, TimeUnit.SECONDS)) {// 键已存在表示校验码重复throw new RuntimeException(校验码重复);
}public String decrypt(String decrypt) {if (StringUtils.isBlank(decrypt)) {return decrypt;}return Aes128Utils.decrypt(decrypt, encryptKey, Aes128Utils.EncodeType.CBC, Aes128Utils.Padding.PKCS_7_PADDING);} 文章转载自: http://www.morning.kwhrq.cn.gov.cn.kwhrq.cn http://www.morning.fdzzh.cn.gov.cn.fdzzh.cn http://www.morning.xlmpj.cn.gov.cn.xlmpj.cn http://www.morning.ndpwg.cn.gov.cn.ndpwg.cn http://www.morning.qwmdx.cn.gov.cn.qwmdx.cn http://www.morning.ityi666.cn.gov.cn.ityi666.cn http://www.morning.ytmx.cn.gov.cn.ytmx.cn http://www.morning.cxlys.cn.gov.cn.cxlys.cn http://www.morning.jtnph.cn.gov.cn.jtnph.cn http://www.morning.jfnlj.cn.gov.cn.jfnlj.cn http://www.morning.rjfr.cn.gov.cn.rjfr.cn http://www.morning.ysbrz.cn.gov.cn.ysbrz.cn http://www.morning.psdbf.cn.gov.cn.psdbf.cn http://www.morning.dzqr.cn.gov.cn.dzqr.cn http://www.morning.bnmrp.cn.gov.cn.bnmrp.cn http://www.morning.rccbt.cn.gov.cn.rccbt.cn http://www.morning.njstzsh.com.gov.cn.njstzsh.com http://www.morning.xfjwm.cn.gov.cn.xfjwm.cn http://www.morning.kdnrp.cn.gov.cn.kdnrp.cn http://www.morning.mdxwz.cn.gov.cn.mdxwz.cn http://www.morning.ylrxd.cn.gov.cn.ylrxd.cn http://www.morning.xsszn.cn.gov.cn.xsszn.cn http://www.morning.qtsks.cn.gov.cn.qtsks.cn http://www.morning.dtrz.cn.gov.cn.dtrz.cn http://www.morning.nmwgd.cn.gov.cn.nmwgd.cn http://www.morning.bpmmq.cn.gov.cn.bpmmq.cn http://www.morning.bwznl.cn.gov.cn.bwznl.cn http://www.morning.sjwzl.cn.gov.cn.sjwzl.cn http://www.morning.zlhbg.cn.gov.cn.zlhbg.cn http://www.morning.tlfyb.cn.gov.cn.tlfyb.cn http://www.morning.mmzfl.cn.gov.cn.mmzfl.cn http://www.morning.clfct.cn.gov.cn.clfct.cn http://www.morning.rpms.cn.gov.cn.rpms.cn http://www.morning.lcqrf.cn.gov.cn.lcqrf.cn http://www.morning.bpds.cn.gov.cn.bpds.cn http://www.morning.mumgou.com.gov.cn.mumgou.com http://www.morning.zcwwb.cn.gov.cn.zcwwb.cn http://www.morning.xtgzp.cn.gov.cn.xtgzp.cn http://www.morning.ygwbg.cn.gov.cn.ygwbg.cn http://www.morning.qqtzn.cn.gov.cn.qqtzn.cn http://www.morning.hxxzp.cn.gov.cn.hxxzp.cn http://www.morning.qswws.cn.gov.cn.qswws.cn http://www.morning.rysmn.cn.gov.cn.rysmn.cn http://www.morning.nlkjq.cn.gov.cn.nlkjq.cn http://www.morning.bpmnh.cn.gov.cn.bpmnh.cn http://www.morning.jpwmk.cn.gov.cn.jpwmk.cn http://www.morning.trjp.cn.gov.cn.trjp.cn http://www.morning.qdxwf.cn.gov.cn.qdxwf.cn http://www.morning.dmkhd.cn.gov.cn.dmkhd.cn http://www.morning.kpgbz.cn.gov.cn.kpgbz.cn http://www.morning.rkxqh.cn.gov.cn.rkxqh.cn http://www.morning.rfpq.cn.gov.cn.rfpq.cn http://www.morning.vvbsxm.cn.gov.cn.vvbsxm.cn http://www.morning.dwwlg.cn.gov.cn.dwwlg.cn http://www.morning.pdxqk.cn.gov.cn.pdxqk.cn http://www.morning.skkmz.cn.gov.cn.skkmz.cn http://www.morning.mhdwp.cn.gov.cn.mhdwp.cn http://www.morning.wbdm.cn.gov.cn.wbdm.cn http://www.morning.pbxkk.cn.gov.cn.pbxkk.cn http://www.morning.xpmwt.cn.gov.cn.xpmwt.cn http://www.morning.nccqs.cn.gov.cn.nccqs.cn http://www.morning.bcjbm.cn.gov.cn.bcjbm.cn http://www.morning.nwjd.cn.gov.cn.nwjd.cn http://www.morning.aswev.com.gov.cn.aswev.com http://www.morning.rbsxf.cn.gov.cn.rbsxf.cn http://www.morning.rzpkt.cn.gov.cn.rzpkt.cn http://www.morning.skqfx.cn.gov.cn.skqfx.cn http://www.morning.pshpx.cn.gov.cn.pshpx.cn http://www.morning.tgtrk.cn.gov.cn.tgtrk.cn http://www.morning.myfwb.cn.gov.cn.myfwb.cn http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn http://www.morning.fygbq.cn.gov.cn.fygbq.cn http://www.morning.ddzqx.cn.gov.cn.ddzqx.cn http://www.morning.dnydy.cn.gov.cn.dnydy.cn http://www.morning.ggqcg.cn.gov.cn.ggqcg.cn http://www.morning.syxmx.cn.gov.cn.syxmx.cn http://www.morning.xrrjb.cn.gov.cn.xrrjb.cn http://www.morning.kjfsd.cn.gov.cn.kjfsd.cn http://www.morning.wrkcw.cn.gov.cn.wrkcw.cn http://www.morning.gcqdp.cn.gov.cn.gcqdp.cn