目次
1. 質問
携帯電話認証コードの送信には少額のお金が必要であることは誰もが知っていますが、誰かが悪意を持って携帯電話認証コード送信インターフェイスを短期間にスワイプした場合、さらに少額のお金が必要になります。認証コードを入力した後、短期間に複数回qqリクエストを行うと送信を続けることができなくなります。この問題を解決するために、このブログがあります。
栗:csdnのログインにはブラッシング防止のための認証コードがあるのですが、他のブログサイトにもないか調べてみました。
2. コード
すべてのロジック コード:
その他の特定の関連コードについては、「redis 統合が QQ メールボックスを介して確認コードを送信する」を参照してください。
//发送邮件
@PostMapping("/email")
public R sendEmail(@RequestParam("toMail") String toMail) {
if (!StringUtils.isEmpty(toMail) & toMail != null) {
String redisCode = (String) redisTemplate.opsForValue().get(AuthServerConstant.SMS_CODE_CACHE_PREFIX + toMail);
if (!StringUtils.isEmpty(redisCode)) {
long time = Long.parseLong(redisCode.split("_")[1]);
if (System.currentTimeMillis() - time < 60000) {
//60秒内不能再发
return R.error(BizCodeEnume.SMS_CODE_EXCEPTION.getCode(), BizCodeEnume.SMS_CODE_EXCEPTION.getMsg());
}
}
String code = YangUtils.getCode();
//2.验证码有效时间
//String code1 = UUID.randomUUID().toString().substring(0, 5)+"_"+System.currentTimeMillis();
String code2 = code + "_" + System.currentTimeMillis();
//redis缓存验证码
redisTemplate.opsForValue().set(AuthServerConstant.SMS_CODE_CACHE_PREFIX + toMail, code2, 10, TimeUnit.MINUTES);
SimpleMailMessage massage = new SimpleMailMessage();
massage.setFrom(mailUsername);
massage.setTo(toMail);
massage.setSubject("Alice小姐为你服务,请收好你的验证码并及时去指定地方兑换奖品哦----");
massage.setText(code);//发送内容为验证码
mailSender.send(massage);
return R.ok("发送成功!");
}else {
return R.error(BizCodeEnume.PHONE_NULL_EXCEPTION.getCode(),BizCodeEnume.PHONE_NULL_EXCEPTION.getMsg());
}
}
その主なロジックは、検証コードとメールボックス番号を Redis に保存し、最初に同じメールボックス番号であるかどうかを判断した後、このインターフェイスを呼び出し続け、60 秒以内にこのインターフェイスを呼び出し続けることです。
次のように:
String redisCode = (String) redisTemplate.opsForValue().get(AuthServerConstant.SMS_CODE_CACHE_PREFIX + toMail);
if (!StringUtils.isEmpty(redisCode)) {
long time = Long.parseLong(redisCode.split("_")[1]);
if (System.currentTimeMillis() - time < 60000) {
//60秒内不能再发
return R.error(BizCodeEnume.SMS_CODE_EXCEPTION.getCode(), BizCodeEnume.SMS_CODE_EXCEPTION.getMsg());
}
}
String code = YangUtils.getCode();
//2.验证码有效时间
//String code1 = UUID.randomUUID().toString().substring(0, 5)+"_"+System.currentTimeMillis();
String code2 = code + "_" + System.currentTimeMillis();
//redis缓存验证码
redisTemplate.opsForValue().set(AuthServerConstant.SMS_CODE_CACHE_PREFIX + toMail, code2, 10, TimeUnit.MINUTES);