简易的缓存工具,用于做短信验证码校验
思路
将验证码信息存入map缓存中,用户输入验证跟缓存中的有效的验证进行比对,来判断登录成功还是失败!
该缓存不用session、cookie存验证码的方式。
工具类CacheUtil
java
public class CacheUtil {
private CacheUtil(){}
private static final Map<String, CacheUtilBean> CACHE_MAP = new HashMap<String, CacheUtilBean>();
public static void set(String key,String value,long exprTime){
//将传入的毫秒数 转换为 将来的时间戳
CACHE_MAP.put(key,new CacheUtilBean(value,System.currentTimeMillis()+exprTime));
}
private static final long DEFAULT_EXPR_TIME = 24*60*60*1000L;
public static void set(String key,String value){
set(key,value, DEFAULT_EXPR_TIME);
}
public static String get(String key){
//获取之前先删除时间点之前的
removeExp();
CacheUtilBean cacheUtilBean = CACHE_MAP.get(key);
if(cacheUtilBean==null){
return "";
}
return cacheUtilBean.getValue();
}
private static void removeExp() {
List<String> removeKey = new ArrayList<>();
for (Map.Entry<String, CacheUtilBean> entry : CACHE_MAP.entrySet()) {
Long exprTime = entry.getValue().getExprTime();
if(System.currentTimeMillis()>exprTime){
removeKey.add(entry.getKey());
}
}
for (String s : removeKey) {
CACHE_MAP.remove(s);
}
//遍历map中有效的值
for (Map.Entry<String, CacheUtilBean> entry : CACHE_MAP.entrySet()) {
System.out.println("CACHE_MAP集合中值:"+entry.getKey()+"===="+entry.getValue().getValue());
}
}
static class CacheUtilBean {
//存的值
private String value;
//过期时间戳 set的时候计算好
private Long exprTime;
public CacheUtilBean(String value, Long exprTime) {
this.value = value;
this.exprTime = exprTime;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public Long getExprTime() {
return exprTime;
}
public void setExprTime(Long exprTime) {
this.exprTime = exprTime;
}
}
}
验证码存入缓存
key为用户名或者手机号,唯一值;
code为系统生成的验证码;
60000为60秒时长;
java
CacheUtil.set(key, code, 60000);
获取缓存中验证码
key为用户名或者手机号,唯一值;
java
String cheCode = CacheUtil.get(key);