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


猜你喜欢
- 一、下载RabbitMQhttp://www.rabbitmq.com/install-windows.html二、下载OTPhttp://
- 蓝牙设置相关界面,以下是通过C#方式打开的几个方式,记录一下蓝牙设置界面1.控制面板命令bthprops.cpl可以用控制面板 contro
- ListView 和ScroolView同时使用计算高度时onmeasure报空指针的解决办法前言:虽然Android 的设计者始终认为Li
- 什么是Mapping同样的,我们先讲基本概念,什么是mapping,上节给大家简要的举了一个例子,还有印象吗?mapping是es中一个比较
- 本文实例讲述了Java设计模式之抽象工厂模式。分享给大家供大家参考,具体如下:具体工厂类:生产创建某一类具体产品对象。抽象产品类可以使用接口
- 使用SlidingTabLayout需要准备2个类,分别是 SlidingTabLayout,与SlidingTabStrip,,放进项目中
- Java 开发语言中实现HTTP请求的方法主要有两种:一种是JAVA的标准类HttpUrlConnection,比较原生的实现方法;另一种是
- 一、Java把这些不同来源和目标的数据都统一抽象为数据流。Java语言的输入输出功能是十分强大而灵活的。在Java类库中,IO部分的内容是很
- 本文实例为大家分享了Viewpager2实现登录注册引导页面的具体代码,供大家参考,具体内容如下介绍屏幕滑动是两个完整屏幕之间的切换,在设置
- 1. 阐述对于Java中Map的遍历方式,很多文章都推荐使用entrySet,认为其比keySet的效率高很多。理由是:entrySet方法
- 需求假设要设计一个名为estimate()的函数,估算编写指定行数的代码所需的时间,并且希望不同的程序员都可以使用该函数。对于所有的用户来说
- 1. 参数中直接加入%%param.setUsername("%CD%"); param.set
- spring boot2集成activiti6踩过的坑1.activiti中的mybaitis版本冲突 错误信息Caused by: jav
- 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知依赖它的对象。观察者模
- javax.persistence中@Column定义字段类型在@Column中有个比较强大的配置 columnDefinition,如果有
- 本文适合有 Java 基础的人群作者:DJL-LankingHelloGitHub 推出的《讲解开源项目》系列。有幸邀请到了亚马逊 + Ap
- 定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。类型:创建类模式类图:工厂方法模式代码in
- 一、ServletConfig讲解1.1、配置Servlet初始化参数在Servlet的配置文件web.xml中,可以使用一个或多个<
- Vector简介ArrayList 和 Vector 其实大同小异,基本结构都差不多,但是一些细节上有区别:比如线程安全与否,扩容的大小等,
- 字符串的拼接,常使用到的大概有4种方式:1.直接使用"+"号2.使用String的concat方法3.使用StringB