pom文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.1.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.ekkcole</groupId><artifactId>testjianzhu</artifactId><version>0.0.1-SNAPSHOT</version><name>testjianzhu</name><description>Demo project for Spring Boot</description><packaging>war</packaging><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-devtools</artifactId><scope>runtime</scope><optional>true</optional></dependency><!-- redis 缓存操作 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><!--验证码--><dependency><groupId>com.github.whvcse</groupId><artifactId>easy-captcha</artifactId><version>1.6.2</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>

application.yml

server:port: 8383servlet:context-path: /test
spring:# redis 配置redis:# 地址host: localhost# 端口,默认为6379port: 6379# 数据库索引database: 1

redis工具类

package com.ekkcole.testjianzhu.utils;import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;/*** spring redis 工具类** @author ruoyi**/
@SuppressWarnings(value = { "unchecked", "rawtypes" })
@Component
public class RedisCache
{@Autowiredpublic RedisTemplate redisTemplate;/*** 缓存基本的对象,Integer、String、实体类等** @param key 缓存的键值* @param value 缓存的值*/public <T> void setCacheObject(final String key, final T value){redisTemplate.opsForValue().set(key, value);}/*** 缓存基本的对象,Integer、String、实体类等** @param key 缓存的键值* @param value 缓存的值* @param timeout 时间* @param timeUnit 时间颗粒度*/public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit){redisTemplate.opsForValue().set(key, value, timeout, timeUnit);}/*** 设置有效时间** @param key Redis键* @param timeout 超时时间* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout){return expire(key, timeout, TimeUnit.SECONDS);}/*** 设置有效时间** @param key Redis键* @param timeout 超时时间* @param unit 时间单位* @return true=设置成功;false=设置失败*/public boolean expire(final String key, final long timeout, final TimeUnit unit){return redisTemplate.expire(key, timeout, unit);}/*** 获得缓存的基本对象。** @param key 缓存键值* @return 缓存键值对应的数据*/public <T> T getCacheObject(final String key){ValueOperations<String, T> operation = redisTemplate.opsForValue();return operation.get(key);}/*** 删除单个对象** @param key*/public boolean deleteObject(final String key){return redisTemplate.delete(key);}/*** 删除集合对象** @param collection 多个对象* @return*/public long deleteObject(final Collection collection){return redisTemplate.delete(collection);}/*** 缓存List数据** @param key 缓存的键值* @param dataList 待缓存的List数据* @return 缓存的对象*/public <T> long setCacheList(final String key, final List<T> dataList){Long count = redisTemplate.opsForList().rightPushAll(key, dataList);return count == null ? 0 : count;}/*** 获得缓存的list对象** @param key 缓存的键值* @return 缓存键值对应的数据*/public <T> List<T> getCacheList(final String key){return redisTemplate.opsForList().range(key, 0, -1);}/*** 缓存Set** @param key 缓存键值* @param dataSet 缓存的数据* @return 缓存数据的对象*/public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet){BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);Iterator<T> it = dataSet.iterator();while (it.hasNext()){setOperation.add(it.next());}return setOperation;}/*** 获得缓存的set** @param key* @return*/public <T> Set<T> getCacheSet(final String key){return redisTemplate.opsForSet().members(key);}/*** 缓存Map** @param key* @param dataMap*/public <T> void setCacheMap(final String key, final Map<String, T> dataMap){if (dataMap != null) {redisTemplate.opsForHash().putAll(key, dataMap);}}/*** 获得缓存的Map** @param key* @return*/public <T> Map<String, T> getCacheMap(final String key){return redisTemplate.opsForHash().entries(key);}/*** 往Hash中存入数据** @param key Redis键* @param hKey Hash键* @param value 值*/public <T> void setCacheMapValue(final String key, final String hKey, final T value){redisTemplate.opsForHash().put(key, hKey, value);}/*** 获取Hash中的数据** @param key Redis键* @param hKey Hash键* @return Hash中的对象*/public <T> T getCacheMapValue(final String key, final String hKey){HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();return opsForHash.get(key, hKey);}/*** 获取多个Hash中的数据** @param key Redis键* @param hKeys Hash键集合* @return Hash对象集合*/public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys){return redisTemplate.opsForHash().multiGet(key, hKeys);}/*** 获得缓存的基本对象列表** @param pattern 字符串前缀* @return 对象列表*/public Collection<String> keys(final String pattern){return redisTemplate.keys(pattern);}/*** 判断redis中是否存在这个key* @param key  Redis键* @return*/public boolean hasKeyBoolean(final String key){return redisTemplate.hasKey(key);}
}

controller

方便测试我就直接在控制器里面写了,实际开发请严格按照规定

package com.ekkcole.testjianzhu.controller;import com.ekkcole.testjianzhu.utils.RedisCache;
import com.ekkcole.testjianzhu.value.AjaxObj;
import com.wf.captcha.SpecCaptcha;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.UUID;
import java.util.concurrent.TimeUnit;/*** @Author ekkcole* @Date 2022/1/19 8:58* @Detail*/
@RestController
public class CaptchaController {@Autowiredprivate RedisCache redisCache;/*** 生成验证码*/@GetMapping("/captchaImage")public Map<String, Object> getCode(HttpServletResponse response) throws IOException {// 保存验证码信息// 1、获取随机uuidString uuid = UUID.randomUUID().toString();// 创建redis keyString verifyKey = "captcha_codes" + uuid;// 生成文字验证码SpecCaptcha specCaptcha = new SpecCaptcha(130, 48, 4);String code = specCaptcha.text().toLowerCase();// 存到redis 设值1分钟后过期redisCache.setCacheObject(verifyKey, code, 1, TimeUnit.MINUTES);Map<String,Object> map=new LinkedHashMap<>();map.put("success","操作成功");map.put("uuid", uuid);map.put("img", specCaptcha.toBase64(""));map.put("code", code);return map;}@GetMapping("login")private Map<String, Object> login(String username, String password, String code, String uuid){// 根据captchaImage接口拿到uuid数据String verifyKey = "captcha_codes" + uuid;// 获取redis中验证码String captcha = redisCache.getCacheObject(verifyKey);// 删除验证码redisCache.deleteObject(verifyKey);// 测试把值写死// 用户验证Map<String, Object> map=new LinkedHashMap<>();if(captcha==null){map.put("code",0);map.put("msg","验证码错误");return map;}if (!code.equalsIgnoreCase(captcha)) {map.put("code",0);map.put("msg","验证码错误");return map;}if("xiaocao".equals(username) && "123".equals(password)){map.put("code",1);map.put("msg","登录成功");}else if(!"xiaocao".equals(username) ){map.put("code",-1);map.put("msg","用户名错误");}else{map.put("code",-1);map.put("msg","密码错误");}return map;}
}

captcha验证码存到redis并实现简易登录相关推荐

  1. 24、短信登录(基于redis实现短信登录)

    短信登录(基于redis实现短信登录) 修改代码(之前的基于session) 发送验证的逻辑:(更改就是将短信验证码存到redis中) 第一步:注入SrtingRedisTemplate (users ...

  2. 前端案例:简易登录表单的制作,包括用户名、密码、随机验证码(代码完整,复制即用)

    案例效果 本案例基于 vue.js 和  Element UI 实现.随机验证码采用 DOM 操作和 canvas 绘制,可随机生成和刷新:后续程序逻辑直接填入方法即可. Element UI 下载安 ...

  3. Captcha验证码

    验证码 URL url(r'^captcha/$', views.CaptchaView.as_view(), name=u'captcha'), # 验证码 url(r'^login/$', vie ...

  4. SpringBoot整合Captcha验证码(含代码)

    1. 基本结构 使用Captcha生成验证码, 利用Redis存储验证码 Redis中的结构为, Key是32位的UUID, Value为Captcha的4位随机字母以及数字的集合 设定Redis过期 ...

  5. Redis实战——短信登录

    目录 1 基于Seesion实现短信登录 1.1 发送短信验证码 1.2 登录功能 2 使用Redis进行短信验证码校验登录 2.1 Seesion方法存在的问题 2.2 发送短信验证码 2.3  验 ...

  6. SpringBoot结合Redis实现维护客户端登录状态

    1.需求 当用户未登录时,只允许访问index/login资源,否则直接查询数据,会过滤到登录页面要求登录. 由于这里用到Redis做缓存数据库,包括保存token以及查询数据缓存等,所以需要提前安装 ...

  7. (二十三)admin-boot项目之captcha验证码整合

    (二十三)captcha验证码整合 项目地址:https://gitee.com/springzb/admin-boot 如果觉得不错,给个 star 简介: 这是一个基础的企业级基础后端脚手架项目, ...

  8. 1.Redis实战—短信登录

    短信登录: 基于Redis缓存: (1)发送短信验证码: 实现逻辑 : 先校验手机号 , 不符合 直接返回错误信息 , 使用的是封装的返回前端的方法 符合 , 生成一个随机验证码 , 使用的是huTo ...

  9. Django搭建服务器,和微信小程序通信,验证码存入redis,用户信息存入mysql以及图片上传

    写在前面:整体是实现小程序的登录和注册,并接收验证码进行校验. 一.创建项目 django-admin startproject wxTest 二.注册app,进入到wxTest目录中 python ...

最新文章

  1. 人工智能加速期:“算法为王”还是“场景落地”优先 ?
  2. python面向对象大段代码_python面向对象部分简单整理
  3. 为什么要完成量子计算机,我们为啥要量子计算机?
  4. 设计模式(二)之装饰器模式
  5. mysql key uni_uni app 踩坑实录
  6. Mybatis学习笔记18 - 缓存
  7. 易宝支付碰到 交易签名无效问题 (2)
  8. 华为python673集_python库-collections模块Counter类
  9. yum安装软件提示Another app is currently holding the yum lock
  10. #2009. 「SCOI2015」小凸玩密室
  11. java21天打卡-day14 日期时间
  12. unity html get post,使用C#开发HTTP服务器系列之实现Get和Post
  13. nvidia控制面板一直闪退如何解决?
  14. android倒计时服务,Android倒计时器——CountDownTimer
  15. 数据安全之数据分类分级系统建设
  16. 在Windows7 系统上部署网关代理服务器
  17. xdm,外包能干吗?
  18. 开发步骤_APP开发和上市的步骤
  19. 京东 ChubaoFS 分布式文件系统分析
  20. centos 安装gstreamer_64位CentOS系统中安装32位开发库

热门文章

  1. 微信小程序--动态设置导航栏颜色
  2. GPU处理能力(TFLOPS/TOPS)
  3. 关于flex开发中的跨域访问问题
  4. Jfinal3.0 解决跨域的问题
  5. 电脑无线WIFI显示无法识别Internet
  6. 分布计算 | 大数据机器学习系统研究进展
  7. k8s监控 heapster部署实践
  8. JavaScript 18 JavaScript 字符串
  9. CRUSH:可控、可扩展的复本数据非中心化的定位算法
  10. Sketch 55 Shark 鲨鱼中文汉化特别版 Mac 设计师必备的原型UI设计工具