package org.linlinjava.litemall.wx.service;

import org.linlinjava.litemall.wx.dto.CaptchaItem;

import java.time.LocalDateTime;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; /**
* 缓存系统中的验证码
*/
public class CaptchaCodeManager {
private static ConcurrentHashMap<String, CaptchaItem> captchaCodeCache = new ConcurrentHashMap<>(); /**
* 添加到缓存
*
* @param phoneNumber 电话号码
* @param code 验证码
*/
public static boolean addToCache(String phoneNumber, String code) { //已经发过验证码且验证码还未过期
if (captchaCodeCache.get(phoneNumber) != null) {
if (captchaCodeCache.get(phoneNumber).getExpireTime().isAfter(LocalDateTime.now())) {
return false;
} else {
//存在但是已过期,删掉
captchaCodeCache.remove(phoneNumber);
}
} CaptchaItem captchaItem = new CaptchaItem();
captchaItem.setPhoneNumber(phoneNumber);
captchaItem.setCode(code);
// 有效期为1分钟
captchaItem.setExpireTime(LocalDateTime.now().plusMinutes(1)); captchaCodeCache.put(phoneNumber, captchaItem); return true;
} /**
* 获取缓存的验证码
*
* @param phoneNumber 关联的电话号码
* @return 验证码
*/
public static String getCachedCaptcha(String phoneNumber) {
//没有这个电话记录
if (captchaCodeCache.get(phoneNumber) == null)
return null; //有电话记录但是已经过期
if (captchaCodeCache.get(phoneNumber).getExpireTime().isBefore(LocalDateTime.now())) {
return null;
} return captchaCodeCache.get(phoneNumber).getCode();
}
}
package org.linlinjava.litemall.wx.dto;

import java.time.LocalDateTime;

/**
* 验证码实体类,用于缓存验证码发送
*/
public class CaptchaItem {
private String phoneNumber;
private String code;
private LocalDateTime expireTime; public String getPhoneNumber() {
return phoneNumber;
} public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
} public String getCode() {
return code;
} public void setCode(String code) {
this.code = code;
} public LocalDateTime getExpireTime() {
return expireTime;
} public void setExpireTime(LocalDateTime expireTime) {
this.expireTime = expireTime;
}
}

最新文章

  1. Python之路第一课Day4--随堂笔记(迭代生成装饰器)
  2. ubuntu一些常用的命令
  3. 在​W​C​F​中​使​用​消​息​队​列​M​S​M​Q
  4. 学习Word2vec
  5. Tips for OpenMesh
  6. window下手动搭建 PHP+Nginx+Mysql(转)
  7. Unity NGUI实现Tabview
  8. 武汉科技大学ACM:1005: 单位转换
  9. Http网络请求
  10. SQLDataSet中执行DDL语句
  11. Arduino LiquidCrystal Library Bug Report #174181
  12. Linux-CentOS 重置root密码
  13. 【数据库问题】sql server 获取MD5值结果不一致的问题 substring(sys.fn_sqlvarbasetostr(HashBytes(&#39;MD5&#39;,&#39;111111&#39;)),11,32)
  14. 第三百九十九节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署CentOS6.5安装mysql5.6
  15. AM自动化测试平台
  16. UDR rsync
  17. mint18
  18. Vue.js 2.x中事件总线(EvevntBus)及element-ui中全屏loading的使用
  19. [中英对照]INTEL与AT&amp;T汇编语法对比
  20. 0701-spring cloud config-简介、Config Server开发、Config Client开发

热门文章

  1. Database--事务
  2. 基于UWB技术的DW1000芯片简单解析
  3. 洛谷 P2543 [AHOI2004]奇怪的字符串
  4. 刷题之Implement strStr()、Climbing Stairs
  5. python 变量搜寻顺序法则LEGB之E注意事项
  6. 当spring单元测试需要用到临时表的时候
  7. 把a表格的内容读取出来,然后写到b表格
  8. [Python函数]encode,decode
  9. odoo 日志文件太大处理,logfile自动轮替
  10. 18 12 `12 WSGI 协议