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. 行集函数:OpenRowSet 和 OpenQuery
  2. 服务应该去版本化,不管是微服务还是SOA
  3. 李航等提出多粒度AMBERT模型,CLUE、GLUE上优于BERT,中文提升显著
  4. 程序员们的时间管理法则
  5. 详尽解析window.event对象
  6. 【深度学习】非极大值抑制Non-Maximum Suppression(NMS)一文搞定理论+多平台实现...
  7. 一行代码,保障分布式事务一致性—GTS:微服务架构下分布式事务解决方案
  8. java双引号的转义字符_好程序员Java教程分享常见的转义字符
  9. 首张数字人民币机票订单诞生 上海-深圳
  10. 如何在 AirPods Pro 上安装 Apple 的 Beta 版固件?
  11. 阶段1 语言基础+高级_1-3-Java语言高级_08-JDK8新特性_第1节 常用函数接口_1_函数式接口的概念函数式接口的定义...
  12. 350. Intersection of Two Arrays II
  13. 网页抽奖程序(年会,开幕式等)
  14. 天刀显示服务器失败,天涯明月刀手游提示安装失败怎么办 10月16日开服常见问题FAQ...
  15. 英语单词前缀规则总结
  16. 高德地图API:如何根据经纬度获取位置信息
  17. Unity-URP学习笔记(八)使用RendererFeature制作屏幕后期-高斯模糊
  18. 微信小程序:for循环与if判断
  19. 盘点一个Pandas操作Excel多条件取值的实战案例
  20. [前端三剑客之CSS]display:none opacity:0 visibility:hidden三角恋的爱恨情仇

热门文章

  1. 小程序云开发实现登录与注册(附源码)
  2. 我参加 NVIDIA Sky Hackathon--- 浅谈数据集处理的心得和教训
  3. 学而时习之,温故而知新——近期新接触的概念、重温以前的概念
  4. exe程序文件修改工具有哪些
  5. 正规矩阵(normal matrix)
  6. 全国计算机考试界面,2017计算机二级考试MSOffice考试设置页面对话框的技巧
  7. #考研笔记#计算机之多媒体应用
  8. 基于集成融合模型检测电商异常订单
  9. C# 调用存储过程操作 OUTPUT参数和Return返回值
  10. 计算机网络:第七章概述课后习题及答案(精细版)