java实现短信验证码5分钟有效时间
作者:kidQ 发布时间:2023-08-30 18:42:26
标签:java,短信,验证码
本文实例为大家分享了java实现短信验证码5分钟有效时间,供大家参考,具体内容如下
实现一个发送短信验证码的请求,要求5分钟之内重复请求,返回同一个验证码。
网上可找到几种方案:
如,存储数据库或缓存中。实现起来比较麻烦,舍弃;
另一种方式即本例,使用session存储。其他方式,暂未进一步了解。
实现步骤: (springmvc)
1、controller中,获取session对象,取code,取不到新生成,并存储session中;
2、单手机号发送量,判断并 +1 记入数据库;
3、Timer定时器,设置新线程延时执行TimerTask任务(删除code)
@RequestMapping(value = "sendMessage",method = RequestMethod.GET)
public Object sendMessage(final HttpServletRequest request){
String phone=request.getParameter("phone");
int times=userService.messageSendToday(phone); //二次验证,单个手机号每日发送上限
if(times <= MAX_PER_DAY){
String checkCode=GenerateRandomCode.createRandomNumber(6);
final HttpSession httpSession=request.getSession();
httpSession.setAttribute("checkCode",checkCode);
CheckCodeMessage checkCodeMessage=new CheckCodeMessage(phone,checkCode);
try {
HttpSender.batchSend(checkCodeMessage);
//TimerTask实现5分钟后从session中删除checkCode
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
httpSession.removeAttribute("checkCode");
System.out.println("checkCode删除成功");
timer.cancel();
}
},5*60*1000);
} catch (Exception e) {
e.printStackTrace();
}
return "redirect:/index.jsp";
}
}
Timer定时任务:
//TimerTask实现5分钟后从session中删除checkCode
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
httpSession.removeAttribute("checkCode");
System.out.println("checkCode删除成功");
timer.cancel();
}
},5*60*1000);
来源:https://blog.csdn.net/qq_37878879/article/details/77585022
0
投稿
猜你喜欢
- 前几天在跟公司大佬讨论一个问题时,看到他使用Handler的一种方式,旁边的同事在说:以前不是这么用的啊。这个问题引发了我的好奇,虽然当时翻
- 字节流和字符流对于文件必然有读和写的操作,读和写就对应了输入和输出流,流又分成字节和字符流。1.从对文件的操作来讲,有读和写的操作——也就是
- 1 StringString:字符串常量,字符串长度不可变。2 StringBufferStringBuffer:字符串变量(Synchro
- 一、SpringCache介绍Spring Cache 是一个优秀的缓存组件。自Spring 3.1起,提供了类似于@Transaction
- 代码入下:import java.io.*; public class Practice { publ
- 1 SharedPreferences 介绍SharedPreferences是使用键值对的方式来存储数据的SharedPreference
- 前言对于 InterruptedException,一种常见的处理方式是 “生吞(swallow)” 它 —— 捕捉它,然后什么也不做(或者
- 本文实例为大家分享了OpenCV实现直线检测并消除的具体代码,供大家参考,具体内容如下很简单,代码如下#include<iostrea
- 配置文件中设置通常在公司级别的项目中,我们可能会写多个application- dev/prod.yml ,然后我们通常会在applicat
- mkdir函数用于创建目录。格式如下:#include<sys/types.h>#include<sys/stat.h&g
- 本文实例讲述了Android基于SoftReference缓存图片的方法。分享给大家供大家参考,具体如下:Java中的SoftReferen
- 前言工作中使用mybatis时我们需要根据数据表字段创建pojo类、mapper文件以及dao类,并且需要配置它们之间的依赖关系,这样的工作
- 很多学习Android程序设计的人都会发现每个人对代码的写法都有不同的偏好,比较明显的就是对控件响应事件的写法的不同。因此本文就把这些写法总
- 摘要:想必大家做开发的时候都会用到下拉刷新的控件,现在各种第三方的下拉刷新控件不胜枚举。当然最NB的还是XListView。其他也有针对Gr
- 1: .net framework 由两个部分组成:CLR 和 FCL。2:在CLR中,所有错误都是通过异常来报告的。3:智能感知功能主要是
- 在并发多线程的情况下,为了保证数据安全性,一般我们会对数据进行加锁,通常使用Synchronized或者ReentrantLock同步锁。S
- 【程序1】题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?1.程序分析:可填在百位、十位、个位的数字都是1
- 前言近期一直在忙项目,我也是打工仔。不多说,我们开始玩一玩seata。什么都不说,我们按照惯例,先上一个图(图里不规范的使用请忽略):简单一
- 本博文将为您提供自Java 7以来增加的很棒的新功能的示例。我将展示每个Java版本的至少一项重大改进,一直到2020年秋季发布的Java
- 先看Demo运行效果SharedPreferences详解SharedPreferences是Android平台上一个轻量级的存储类,用来保