前言:小程序发送短信验证码需要在后台储存生成的code,一次会话应放入session中,请求头部发送sessionId验证为同一session

1.页面一加载就从后台获取sessionId,储存在本地缓存中

后台:

    /**
* 获得sessionId
*/
@RequestMapping("/getSessionId")
@ResponseBody
public Object getSessionId(HttpServletRequest request) {
try {
HttpSession session = request.getSession();
return session.getId();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

2.发送验证码时在头部携带 "Cookie": sessionId,然后将电话号码传给后台

    /**
* 发送短信验证码
* @param phoneNum 接收手机号码
*/
@RequestMapping(value = "/sendMsg",method = RequestMethod.POST)
public Object sendSms(HttpServletRequest request, String phoneNum) {
try {
JSONObject json = null;
//生成6位验证码
String verifyCode = String.valueOf(new Random().nextInt(899999) + 100000);
AliyunMessage.sendMessage(phoneNum,verifyCode);
//将验证码存到session中,同时存入创建时间
//以json存放,这里使用的是阿里的fastjson
HttpSession session = request.getSession();
json = new JSONObject();
json.put("verifyCode", verifyCode);
json.put("createTime", System.currentTimeMillis());
// 将认证码存入SESSION
request.getSession().setAttribute("verifyCode", json);
return "success";
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

3.验证验证码

前台发送请求验证时同样需要携带sessionId的头部

    /**
* 验证
*/
@RequestMapping(value = "/verification",method = RequestMethod.POST)
@ResponseBody
public Object addinfo(
HttpServletRequest request,
String phoneNum,
String code) {
JSONObject json = (JSONObject)request.getSession().getAttribute("verifyCode");
if(!json.getString("verifyCode").equals(code)){
return "验证码错误";
}
if((System.currentTimeMillis() - json.getLong("createTime")) > 1000 * 60 * 5){
return "验证码过期";
}
return "success";
}

从session中获取code,然后与传过来的code相比较

这里设置的失效时间为5分钟

最新文章

  1. UrlEncode编码/UrlDecode解码 - 站长工具
  2. [sicp]huffman编码的实现 @ Scheme
  3. (转载)Java基础知识总结
  4. CentOS 7.0启用iptables防火墙
  5. CSS3最简洁的轮播图
  6. bzoj1306
  7. JavaScript 实现数组的foreach
  8. Linux动态频率调节系统CPUFreq之三:governor
  9. 【C++】C++中的分离式编译
  10. Chapter 5 数组:为什么很多编程语言种数组都是从0开始编号?
  11. Python学习笔记 -- 第一章
  12. iOS开发-- TFHpple抓取GB-2312编码的html页面,页面返回编码错误
  13. js 正则函数初级
  14. 编译https://github.com/CIR-KIT/steer_drive_ros时出现的问题
  15. 泡泡机器人SLAM 2019
  16. 企业案例(一):由于mysql sleep线程过多小故障
  17. MQTT介绍(3)java模拟MQTT的发布,订阅
  18. Springmvc和Mybatis中常用的注解
  19. Spring框架第五篇之Spring与AOP
  20. AspectJ语法

热门文章

  1. C#实现http协议GET、POST请求
  2. vue项目接口管理,所有接口都在apis文件夹中统一管理
  3. WPF---数据绑定之PasswordBox绑定(八)
  4. 快速创建Spring web项目
  5. js之DOM入门(慕课网学习笔记)
  6. ubuntu18.04 开机启动/停止服务
  7. Java从文件路径中获取文件名的几种方法
  8. [源码解析] 深度学习流水线并行 PipeDream(2)--- 计算分区
  9. MySQL密码重置方法
  10. NOIP模拟22「d·e·f」