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;
}
}