当前位置: 首页 > news >正文

项目1其二(验证码、jwt)

分析需求:1、验证码 2、登录验证jwt

一、验证码
我们采用将验证码存到redis的方式进行前后端数据验证
如何做一个redis呢。
1、RedisTemplate<Object, Object>这种类型的模板是不需要手动注册到容器里的
2、因此在Api里直接注入后,进行接口的编写即可

@GetMappingpublic void captcha(String id, HttpServletRequest req, jakarta.servlet.http.HttpServletResponse resp) throws IOException {SpecCaptcha captcha = new SpecCaptcha(140, 40, 4);resp.setContentType("image/gif");resp.setHeader("Pragma", "No-cache");resp.setHeader("Cache-Control", "no-cache");resp.setDateHeader("Expires", 0);//req.getSession().setAttribute("captcha", captcha.text().toLowerCase());redisTemplate.opsForValue().set("captcha-" + id, captcha.text().toLowerCase(), Duration.ofMinutes(3));captcha.out(resp.getOutputStream());}

前端可以通过:captchaUrl.value = “/api/captcha?id=” + captchaId.value;
通过el-image进行渲染

二、jwt
1、jwt生成工具

public static String createJwt(String username, String id, Map<String, Object> payloads, LocalDateTime expireTime, String secretKey) {JWTCreator.Builder builder = JWT.create();String jwt = builder.withPayload(payloads).withExpiresAt(expireTime.toInstant(ZoneOffset.of("+8"))).withIssuer("陈平安").withIssuedAt(Instant.now()).withSubject("用户认证").withAudience(username).withJWTId(id).sign(Algorithm.HMAC256(secretKey));return jwt;}

传给前端jwt即可

2、后端校验
先将之前工具里的参数secretKey写到配置文件里面,通过@Value(“${}”)读取值
定义拦截器

@Component
public class JwtInterceptor implements HandlerInterceptor

重写里面的preHandle用来拦截过来的请求,请求头没有前端给的jwt数据就拒绝
在这里插入图片描述
写好拦截器记得要去配置类里面进行注册
首先注入jwt拦截器,然后进行
在这里插入图片描述
三、前端接收并给后端的请求头上携带jwt
在这里插入图片描述
这里pinia里面就有jwt的值了,后续发送请求头就可以通过下面的axios拦截器进行请求头jwt的携带了
在这里插入图片描述
若前端给的响应里面有新的jwt,这里要及时更新
在这里插入图片描述
这里的token只是后端可能给了个叫token的头数据而已

http://www.dtcms.com/a/340938.html

相关文章:

  • 实时视频技术选型深度解析:RTSP、RTMP 与 WebRTC 的边界
  • 云计算学习100天-第25天
  • YOLOv11 到 C++ 落地全流程:ONNX 导出、NMS 判别与推理实战
  • 基于卷积神经网络的多输出数据回归预测CNN(多输入多输出)
  • 将SSL配置迁移到Nacos的步骤
  • 软件测试:如何利用Burp Suite进行高效WEB安全测试
  • 面试官视角分析与提问点
  • SpringBoot3 Ruoyi芋道管理后台vben5.0
  • 记录 docker容器打包成镜像 在其他服务器快速启动镜像和容器
  • Linux《进程间通信(下)》
  • 什么是股指期货可转移阿尔法策略?
  • Web3:重构互联网秩序的下一代范式革命
  • 三格电子Profinet转Modbus RTU网关技术详解
  • (第二十五节课内容总结)
  • AGV小车cad+三维图+设计说明书
  • Autoware Universe 感知模块详解 | 第一节 宏观认识Autoware Universe整体架构
  • Linux Shell 常用操作与脚本示例详解
  • DL00271-基于YOLOv11的激光雷达LiDAR船舶目标检测含完整数据集
  • C++开发/Qt开发:单例模式介绍与应用
  • 系统架构设计师备考第1天——系统架构概述
  • Redis-缓存-雪崩-持久化、集群、灾备
  • VSCode架构解析
  • MyIP:开源的功能强大的网络诊断工具箱,解析与部署
  • PyTorch中的c10::ArrayRef和at::IntArrayRef
  • 【图像算法 - 19】慧眼识苗:基于深度学习与OpenCV的大棚农作物生长情况智能识别检测系统
  • 基于最小二乘支持向量机的数据回归预测 LSSVM
  • 第四章:大模型(LLM)】07.Prompt工程-(4)思维链(CoT, Chain-of-Thought)Prompt
  • python的物资管理系统
  • Java内功修炼(2)——线程安全三剑客:synchronized、volatile与wait/notify
  • MongoDB 分片集群修改管理员密码