Java实现短信验证码是否超时

   2025-06-22 00
核心提示:Java实现短信验证码是否超时主要是检查验证码的生成时间与当前时间的差值是否超过设定的时间限制。如果时间差超过限制,则验证码视为已超时。这种机制增强了系统的安全性,防止用户使用过期的验证码登录或操作。其核心逻辑在于时间戳的计算与比较。

在Java中实现短信验证码的超时检查可以通过多种方式完成。以下是一个简单的示例,使用Java的Timer和ScheduledExecutorService来检查验证码是否超时。假设验证码的有效期为5分钟。

Java实现短信验证码是否超时

我们需要一个存储验证码的类,例如SmsCode类,其中包含验证码和生成时间,我们可以使用HashMap来存储这些验证码和对应的用户信息,然后我们可以设置一个定时任务来检查验证码是否过期,如果验证码过期,我们可以从存储中删除它。

这是一个简单的实现示例:

Java实现短信验证码是否超时

import java.util.*;
import java.util.concurrent.*;
import java.util.concurrent.atomic.*;
public class SmsCodeManager {
    private static final int EXPIRE_TIME = 5; // 设置验证码过期时间(分钟)
    private Map<String, SmsCode> codeMap = new HashMap<>(); // 存储验证码和用户信息的映射表
    private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); // 创建定时任务执行器
    private AtomicLong lastCheckTime = new AtomicLong(); // 记录上次检查时间,用于判断是否需要检查超时
    public void addSmsCode(String userId, String code) {
        SmsCode smsCode = new SmsCode();
        smsCode.setCode(code);
        smsCode.setCreateTime(new Date()); // 获取当前时间作为创建时间
        codeMap.put(userId, smsCode); // 将验证码和用户信息存入映射表
        // 检查是否需要启动定时任务检查超时,如果距离上次检查已经超过五分钟则启动任务,否则不启动(避免频繁启动任务)
        if (System.currentTimeMillis() - lastCheckTime.get() > TimeUnit.MINUTES.toMillis(EXPIRE_TIME)) {
            lastCheckTime.set(System.currentTimeMillis()); // 更新上次检查时间
            scheduler.scheduleAtFixedRate(this::checkExpire, 0, TimeUnit.MINUTES, EXPIRE_TIME); // 启动定时任务检查超时,每隔五分钟执行一次任务,首次执行延迟为0秒(立即执行)
        }
    }
    private void checkExpire() { // 检查验证码是否超时的任务方法
        for (SmsCode code : codeMap.values()) { // 遍历所有验证码和用户信息映射关系
            Date now = new Date(); // 获取当前时间
            if (now.before(code.getCreateTime().getTime() + TimeUnit.MINUTES.toMillis(EXPIRE_TIME))) { // 判断是否超过有效期时间(当前时间小于创建时间加上五分钟)
                codeMap.remove(code); // 如果超过有效期则删除该验证码和用户信息映射关系(即删除该验证码)
            }
        }
    }
}

在这个例子中,我们使用了ScheduledExecutorService来定期执行检查任务,每次添加新的验证码时,我们会检查是否需要启动定时任务检查超时,如果距离上次检查已经超过五分钟,我们会启动定时任务并设置下次执行的时间为五分钟后的时间点,在定时任务的执行方法中,我们会遍历所有的验证码和用户信息映射关系,检查每个验证码是否超过有效期,如果超过有效期,我们会删除该验证码和用户信息的映射关系,这样我们就实现了短信验证码的超时检查功能。

 
举报评论 0
 
更多>同类资讯
推荐图文
推荐资讯
点击排行
友情链接
网站首页  |  关于我们  |  联系方式  |  用户协议  |  隐私政策  |  版权声明  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报