springboot网站开发,使用redis配合验证手机短信验证码是否有效

springboot网站开发,使用redis配合验证手机短信验证码是否有效!实际业务开发中,经常遇到手机注册的情况,少不了需要验证客户提交过来的短信验证码信息,是否正确。下面是一个简单的案例代码。


package com.blog.utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;

import javax.annotation.Resource;
import javax.servlet.http.HttpSession;
import java.time.LocalDate;
import java.util.concurrent.TimeUnit;

/**
 * 验证手机注册时的短信验证码信息是否有效,默认有效期是5分钟。
 */
public class VerificationCaptcha {

    private static Logger alogger = LoggerFactory.getLogger("xx_xunwu");
    @Resource
    private RedisTemplate<String, Object> redisTemplate;
    /**
     * 验证用户输入的短信验证码是否有效
     * 每一条验证码,都肯定和某个手机号是绑定的,所以验证也需要组合起来。
     * @return
     */
    public  boolean VerificationCaptchaForRegisterByPhone(String phone,String captcha) {
        try {

            // 2.captcha,今天的日期作为prefix
            String key = "rate:limit:registerbyphone:"+ phone +":"+ captcha;

            // 3.检查用户输入的验证码是否存在redis中。
            ValueOperations<String, Object> opsForValue = redisTemplate.opsForValue();
            //查询redis内是否已经存在当前captcha的信息
            Integer count = (Integer) opsForValue.get(key);
            // 4.如何查询不到,说明验证码是无效的,直接返回false;
            if (count == null || count <=0) {
                return  false;
            }

        } catch (Exception e) {
            e.printStackTrace();
            alogger.info("验证手机短信验证码是否有效时遇到故障:"+e.getMessage());

        }
        return  true;
    }

}

2:设计思路是:每一条短信验证码,肯定是会和某个手机号绑定组合的。所以,我们在策划这个方法的时候,加入了2个参数,一个是手机号,一个是短信验证码。

使用这2者组合的信息,作为key来完成验证有效性。

3:还有一个业务接口,会在用户提交申请短信验证码的时候,就已经提前使用phone+captcha组合的key存入了redis中,并且设置好了过期节点是5分钟之后。

4:到了这一步,就是验证用户输入的提交到后台控制器方法内的有效性了。

所以我们直接查询即可,如果查询到了,就说明是输入的正确。查询不到,说明输入的错误。