使用Captcha生成验证码, 利用Redis存储验证码
Redis中的结构为, Key是32位的UUID, Value为Captcha的4位随机字母以及数字的集合
设定Redis过期时间为1min, 即可实现过期验证码的自动失效
基本的依赖这里不再叙述, 主要说一下要导入Captcha的依赖
1 | xml复制代码<!--Kaptcha--> |
所有的依赖如下
1 | xml复制代码<?xml version="1.0" encoding="UTF-8"?> |
配置SpringBoot的配置文件, 这里主要关注一个session的过期时间
1 | yaml复制代码#Port |
其余的配置, 如log4j, druid, SpringSecurity, RedisTemplate,这里就不再赘述
我们可以通过JAVA的配置类来配置Captcha生成验证码的一些规则
1 | java复制代码package com.wang.spring_security_framework.config; |
使用UUID作为key, 同时考虑到对验证码的输出结果可能有不同的要求, 这里写两个工具类来处理它们
- UUIDUtil
package com.wang.spring_security_framework.util;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;
import java.util.UUID;
@Component
public class UUIDUtil {
/**
* 生成32位的随机UUID
* @return 字符形式的小写UUID
*/
@Bean
public String getUUID32() {
return UUID.randomUUID().toString()
.replace(“-“, “”).toLowerCase();
}
}
CaptchaUtil
1 | java复制代码package com.wang.spring_security_framework.util; |
1 | typescript复制代码package com.wang.spring_security_framework.service; |
2. 实现类
1 | typescript复制代码package com.wang.spring_security_framework.service.serviceImpl; |
- 这里的验证, 只是简单的验证了输入是否能从Redis中匹配, 返回了字符串
- 真实的验证中, 我们还要在逻辑中添加用户名和密码的考虑
1 | kotlin复制代码package com.wang.spring_security_framework.controller; |
- captcha 用于获取一个验证码
- login1 用于接收到前端的请求后验证并返回结果
- login1 这里为了测试简便实用了GET方法, 而实际中最好使用POST方法, 这样安全性更高
前端结构如图, 实现了一个简单的验证码
1 | xml复制代码<!DOCTYPE html> |
- 用一个 a 标签包围 img 标签, 这样如果图片没有加载出来也有一个超链接, 不过点了以后没有效果
- (function())等同于(function())等同于(function())等同于(document).ready(function()) ==> 页面加载完毕之后, 才执行函数, 这里必须要写这个函数, 否则第一次加载不会调用 onclick 方法, 也就不会生成验证码!
- 我们利用隐藏域将验证码的key传递到表单中, 我们在 img 的点击事件对应的函数的ajax回调函数中可以利用jQuery操作DOM, 顺带取出key值放到我们的隐藏域中, 这样提交的时候就会提交 key 和用户输入的 value 了
示例
验证通过
完成!
本文转载自: 掘金