文章目录
前言一、引入依赖二、配置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;}
输入过期的验证码:
到这里本篇文章就结束了,喜欢的小伙伴点个赞吧!
总结
希望对大家有帮助,下面还会出一些关于验证功能的干货文章,比如条形码的生成,二维码的生成,这些都是企业常用的干货。