1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 全网最新Redis结合Kaptcha实现验证码功能篇二(前后端分离)

全网最新Redis结合Kaptcha实现验证码功能篇二(前后端分离)

时间:2022-08-06 20:20:44

相关推荐

全网最新Redis结合Kaptcha实现验证码功能篇二(前后端分离)

文章目录

前言一、引入依赖二、配置yam三、使用步骤3.1 Redis序列化配置类3.1 写入key测试3.2 将验证码存入Redis中3.3 登录获取验证码比对1、安装axios2、编写页面接口3、登录接口总结

前言

Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。


一、引入依赖

<!--redis依赖包--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>mons</groupId><artifactId>commons-pool2</artifactId></dependency>

二、配置yam

spring:redis:###################以下为redis单机模式配置###########################host: 127.0.0.1# Redis服务器地址port: 6379# Redis服务器连接端口database: 0 # Redis数据库索引(默认为0)password: # Redis服务器连接密码(默认为空)timeout: 3000 # 连接超时时间(毫秒)lettuce: # Redis的Java驱动包,使用lettuce连接池pool:max-active: 200 # 连接池最大连接数(使用负值表示没有限制)max-wait: -1 # 连接池最大阻塞等待时间(使用负值表示没有限制)max-idle: 10 # 连接池中的最大空闲连接 (默认为8)min-idle: 0# 连接池中的最小空闲连接

三、使用步骤

3.1 Redis序列化配置类

@Configurationpublic class RedisConfig {/*** 自定义序列化机制* @param connectionFactory* @return*/@Bean(name = "redisTemplateCustomize")@SuppressWarnings("all")public RedisTemplate<String, Object> redisTemplate(RedisConnectionFactory connectionFactory) {RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();template.setConnectionFactory(connectionFactory);Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class);ObjectMapper om = new ObjectMapper();om.setVisibility(PropertyAccessor.ALL, JsonAutoDetect.Visibility.ANY);om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);jackson2JsonRedisSerializer.setObjectMapper(om);StringRedisSerializer stringRedisSerializer = new StringRedisSerializer();// key采用String的序列化方式template.setKeySerializer(stringRedisSerializer);// hash的key也采用String的序列化方式template.setHashKeySerializer(stringRedisSerializer);// value序列化方式采用jacksontemplate.setValueSerializer(jackson2JsonRedisSerializer);// hash的value序列化方式采用jacksontemplate.setHashValueSerializer(jackson2JsonRedisSerializer);template.afterPropertiesSet();return template;}}

3.1 写入key测试

@SpringBootTestclass SpringbootDemoApplicationTests {@Autowiredprivate RedisTemplate<Object,Object> redisTemplate;@Testvoid contextLoads() {// 写入一个key,value为101redisTemplate.opsForValue().set("dt", "101");// 读取key的值System.out.println(redisTemplate.opsForValue().get("dt"));}}

3.2 将验证码存入Redis中

查看结果:

// 存入redis(设置过期时间1分钟)redisTemplate.opsForValue().set(Constants.KAPTCHA_SESSION_KEY, randomText,60, TimeUnit.SECONDS);

Constants.KAPTCHA_SESSION_KEY是kaptcha内置提供的变量:

TimeUnit.SECONDS是Java类:JavaAPI的时间粒度单位枚举类型有如下几种

MICROSECONDS 微秒 一百万分之一秒(就是毫秒/1000)MILLISECONDS 毫秒 千分之一秒 NANOSECONDS 毫微秒 十亿分之一秒(就是微秒/1000)SECONDS秒MINUTES分钟HOURS小时DAYS天

3.3 登录获取验证码比对

上面我是可以存入数据库了,下面我们来分析一下业务,验证码有过期时间,如果登录提交的时候查询到的验证码不存在,那么就重新生成验证码。

1、安装axios

安装axios

npm install axios

import axios from "axios";

2、编写页面接口

<el-form-item><el-button @click="loginFun()" type="button" class="dt_button">登录系统</el-button></el-form-item>

// 登录loginFun() {let _this = thisif(_this.userForm.code == null){alert("请输入验证码!")return false}axios.post('http://localhost:8081/api/login', {code: _this.userForm.code}).then(function (res) {if(res.data.code === 5001){alert(res.data.msg)}else if(res.data.code === 5000){alert(res.data.msg)}else {alert(res.data.msg)}console.log(res);}).catch(function (error) {console.log(error);});}

3、登录接口

/*** 模拟登录* @param code* @return*/@PostMapping("/login")public JSONObject login(String code){JSONObject json = new JSONObject();// 查询redis中是否有值String object = (String) redisTemplate.opsForValue().get(Constants.KAPTCHA_SESSION_KEY);if(StringUtils.isNotBlank(object)){// 输入的验证码是否和redis中一致if(object.equals(code)){// 验证有效时间Long expire = redisTemplate.boundHashOps(Constants.KAPTCHA_SESSION_KEY).getExpire();System.out.println("expire->>>"+expire);if (expire < 0L){json.put("code","5000");json.put("msg","验证码已过期!");return json;}}else {json.put("code","5001");json.put("msg","输入验证码不正确!");return json;}}else {json.put("code","5000");json.put("msg","验证码已过期!");return json;}// TODO 数据库验证账号密码json.put("code","2000");json.put("msg","登录成功!");return json;}

输入过期的验证码:

到这里本篇文章就结束了,喜欢的小伙伴点个赞吧!

总结

希望对大家有帮助,下面还会出一些关于验证功能的干货文章,比如条形码的生成,二维码的生成,这些都是企业常用的干货。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。