【无标题】

简易的缓存工具,用于做短信验证码校验

思路

将验证码信息存入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);
相关推荐
HUANGZHENXUAN123几秒前
代码解析(二):detect_video.py —— 一个纯函数 + 一段主循环
后端
ikgy12 分钟前
JAVA EE:1.计算机是如何工作的
java·java-ee
爱勇宝27 分钟前
《道德经》第 13 章:别让评价系统控制你的心
前端·后端·产品
掘金者阿豪31 分钟前
集中式与分布式数据库怎么选?从架构原理到电科金仓的实践思考
前端·后端
AI技术新视界34 分钟前
LLM 提示词缓存(Prompt Caching)的秘密
人工智能·缓存·llm·prompt
.痞老板.1 小时前
java ee--计算机是如何工作的
java·开发语言·java-ee
张彦峰ZYF1 小时前
升级了不等于变好了:AI回归测试的固定评测集、版本对比、质量阈值与CI门禁
人工智能·后端·模型或提示词升级·语言模型没有编译器与确定性输出·总体、切片与回退清单·红线、护栏与目标·ci门禁把判定写进合并路径
青梅味猪大肠1 小时前
【操作系统-60】临近适应算法
java·linux·开发语言·嵌入式硬件·算法·操作系统
CoderYanger1 小时前
Java EE 进阶:8.MyBatis 操作数据库(入门)(第一弹)
java·数据库·spring·面试·职场和发展·java-ee·mybatis
程序员沉梦听雨1 小时前
【搜索引擎】Kibana使用指南
java·后端·学习笔记