通过jedis实现验证码

首先,导入jedis依赖,springboot内置了jedis,所以无需指定jedis版本

 <!--jedis依赖 使用redis-->
 <dependency>
     <groupId>redis.clients</groupId>
     <artifactId>jedis</artifactId>
 </dependency>

redis相关环境: redis-5.0.0
redis客户端:redis-desktop-manager-0.8.2.3849(1)

在java里使用jedis步骤
做一个jedis配置

@Configuration
public class RedisConfig {

    @Value("${spring.redis.port}")
    private int port;

    @Value("${spring.redis.jedis.pool.max-idle}")
    private int maxIdle;

    @Value("${spring.redis.host}")
    private String host;

    @Value("${spring.redis.password}")
    private String password;

    @Bean
    public JedisPool jedisPool() {
        // 连接池配置参数
        GenericObjectPoolConfig config = new GenericObjectPoolConfig();
        config.setMaxIdle(maxIdle);
        // 连接池
        JedisPool jedisPool = new JedisPool(config, host, port, 2000, password);
        return jedisPool;
    }
}

创建一个JedisUtils工具类,主要用于获取jedis资源和释放jedis

@Component
public class JedisUtils {

    @Autowired
    private JedisPool jedisPool;

    /**
     * 获取jedis资源
     *
     * @return
     */
    public Jedis getJedis() {
        Jedis jedis = jedisPool.getResource();
        return jedis;
    }

    /**
     * 释放jedis
     *
     * @param jedis
     */
    public void close(Jedis jedis) {
        if (jedis != null) {
            jedis.close();
        }
    }
}

controller层,实现随机生成验证码,检查验证码是否正确

@Controller
public class CodeController {

    @Autowired
    private JedisUtils jedisUtils;

    /**
     * 判断验证码是否一致,同时做安全防护处理
     * @param code
     * @param inputCode
     * @return 1正确,-1错误,-2连续输入错误五次,限制两分钟
     */
    @ResponseBody
    @RequestMapping("checkCode")
    public String checkCode(String code, String inputCode) {
        if (!code.equals(inputCode)) {
            Jedis jedis = jedisUtils.getJedis();
            if (jedis.get("checkNum") == null) {
                jedis.set("checkNum", "0");
                jedis.expire("checkNum", 120);
            }
            jedis.incr("checkNum");

            if (Integer.parseInt(jedis.get("checkNum")) == 5) {
                jedis.del("checkNum");
                return "-2";
            }
            return "-1";
        } else {
            return "1";
        }
    }

    /**
     * 返回六位数字验证码,同时做安全防护处理
     * @return
     */
    @ResponseBody
    @RequestMapping("sendCode")
    public String sendCode() {
        String code = getRandomCode();
        Jedis jedis = jedisUtils.getJedis();

        // 判断num是否存在 不存在就创建 并设置过期时间60秒
        if (jedis.get("num") == null) {
            jedis.set("num", "0");
            jedis.expire("num", 60);
        }
        jedis.incr("num");

        // 一分钟内输入三次 限制获取验证码 两分钟
        if (Integer.parseInt(jedis.get("num")) == 3) {
            jedis.del("num");
            return "-1";
        }
        jedis.setex("code", 20, code);
        return code;
    }

    /**
     * 随机生成六位数验证码
     * @return
     */
    public String getRandomCode() {
        Random random = new Random();
        String code = String.valueOf(random.nextInt(1000000));
        if (code.length() != 6) {
            getRandomCode();
        }
        return code;
    }

}

在页面上通过ajax发送请求

function binding() {
        var inputCode = $("#code1").val();

        $.ajax({
            url: "checkCode",
            type: "POST",
            data: {"code": code, "inputCode": inputCode},
            success: function (data) {
            	......
            	省略逻辑处理
            }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值