当前位置: 首页 > 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.lryc.cn/news/627104.html

相关文章:

  • Python如何将两个列表转化为一个字典
  • Spring Boot 实战:从项目搭建到部署优化
  • react state变化生命周期钩子
  • 【ansible】4.实施任务控制
  • VMware Workstation | 安装Ubuntu20.04.5
  • Linux基础介绍-3——第一阶段
  • 领码方案:通用物联网数据采集低代码集成平台——万物智联时代的黄金钥匙
  • 解决 nginx: [warn] “ssl_stapling“ ignored, issuer certificate not found 报错
  • 计算机视觉 图片处理 在骨架化过程中,每次迭代都会从图像的边缘移除一层像素,直到只剩下单像素宽度的骨架
  • RAG优化进阶 - LinkAI智能体平台的知识库落地实践
  • 数据库架构开发知识库体系
  • 【JavaEE】(17) MyBatis 基础
  • 趣打印高级版--手机打印软件!软件支持多种不同的连接方式,打印神器有这一个就够了!
  • sourcetree 拉取代码
  • HTML--pre标签的作用
  • SpringCloud微服务架构入门指南
  • 8 webUI中-Controlnet(控制与约束)的应用分类与使用方法
  • CentOS 系统 Java 开发测试环境搭建手册
  • 用倒计时软件为考研备考精准导航 复习 模拟考试 日期倒计时都可以用
  • E10 通过RPC实现账号批量锁定与解锁
  • 宝塔部署 Nuxt3
  • 透传 Attributes(详细解析)1
  • 新手向:Python制作简易音乐播放器
  • 软考中级习题与解答——第一章_数据结构与算法基础(1)
  • PyTorch 深度学习常用函数总结
  • Dify 从入门到精通(第 45/100 篇):Dify 的外部系统集成
  • AI 伦理的 “灰色地带”:当算法拥有决策权,公平与隐私该如何平衡?
  • 【C++】模版(初阶)
  • C++ std::optional 深度解析与实践指南
  • kotlin 协程笔记