博客项目-day02(登录功能)

ops/2025/2/11 12:40:06/

登录功能

这里使用JWT令牌技术进行登录功能的实现
JWT介绍
需要导入jjwt的依赖
先看接口
在这里插入图片描述
传入账号密码返回token
先导入一个JWT工具类

java">public class JWTUtils {private static final String jwtToken = "123456Mszlu!@###$$";public static String createToken(Long userId){Map<String,Object> claims = new HashMap<>();claims.put("userId",userId);JwtBuilder jwtBuilder = Jwts.builder().signWith(SignatureAlgorithm.HS256, jwtToken) // 签发算法,秘钥为jwtToken.setClaims(claims) // body数据,要唯一,自行设置.setIssuedAt(new Date()) // 设置签发时间.setExpiration(new Date(System.currentTimeMillis() + 24 * 60 * 60 * 60 * 1000));// 一天的有效时间String token = jwtBuilder.compact();return token;}public static Map<String, Object> checkToken(String token){try {Jwt parse = Jwts.parser().setSigningKey(jwtToken).parse(token);return (Map<String, Object>) parse.getBody();}catch (Exception e){e.printStackTrace();}return null;}}

登录功能实现
controller
在这里插入图片描述
Service
在这里插入图片描述

获取用户信息

在这里插入图片描述

我们返回token后他存储在浏览器的storage中
访问别的界面他就会通过这个token获取用户信息,然后我们实现就行

controller
在这里插入图片描述
service(这里直接用userservice,按理来说应该再写一个)
在这里插入图片描述
在这里插入图片描述

退出登录

没什么好讲的
就是删除redis中存储的token
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

注册

注册就是输入
其实和登录差不多,把登录的查询逻辑改为insert逻辑即可,生成token加入到mysql和redis数据库,然后返回token
一个方法涉及了多个数据库操作,记得加事务

糊涂点

我们使用JWT工具类生成的只是字符串token
然后我们在redis里面存储的key是TOKEN_后面加上我们的token字符串
而我们的value是对应的sysuser对象的json字符串(这个字符串里面有我们从findUser查到的字段,如下)
这个会再loginService中实现将这个K-V写入Redis
然后返回这个token字符串给浏览器
在这里插入图片描述
然后当我们获取用户信息的时候
我们使用checkToken
有三步骤1.检验token是否为空2.检验token是否合法3.检验token在redis过期没
就出现了这段代码
而2的逻辑在哪个JWTutils实现了,直接调用,返回的K-V只有userid,但是我们不是根据这个查数据的,我们根据我们第三步
存储在redis中的数据进行数据查询到我们的sysUser对象
在这里插入图片描述


http://www.ppmy.cn/ops/157524.html

相关文章

在OAS中设计简单抬头显示器

在OAS中设计简单抬头显示器 本文演示了如何使用OAS工具设计抬头显示器。 简介 车载HUD是一种将关键信息投射到驾驶员前方视野中的设备&#xff0c;使驾驶员无需低头即可获取车辆状态和导航等数据。构建车载HUD的理论模型时&#xff0c;需综合考虑光学系统、投影技术、人机交…

C 移位运算符

宏定义 #define GET_BIT(n) ((1 << (n))) 用于生成一个整数&#xff0c;该整数在第 n 位上是 1&#xff0c;其余位都是 0。这个宏通常用于位操作&#xff0c;比如设置、清除或检查某个特定位置的标志位。 1 << (n)&#xff1a;这是位移操作符。它将数字 1 左移 n …

Spring Test 的作用与优势

场景设定 假设你开了一家餐厅&#xff0c;需要测试每个环节是否正常&#xff1a; 服务员点单&#xff08;Service 层&#xff09;厨师做菜&#xff08;DAO 层&#xff0c;操作数据库&#xff09;菜品配送&#xff08;Web 层&#xff0c;API 接口&#xff09; 问题来了&#…

Http和Socks的区别?

HTTP 和 SOCKS 的区别 HTTP 和 SOCKS 都是用于网络通信的协议&#xff0c;但它们在工作原理、应用场景和实现方式上有显著的区别。以下是详细的对比和说明。 一、HTTP 协议 1. 定义 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是用于传输超文本数据的应用层协…

C#常用集合优缺点对比

先上结论&#xff1a; 在C#中&#xff0c;链表、一维数组、字典、List<T>和ArrayList是常见的数据集合类型&#xff0c;它们各有优缺点&#xff0c;适用于不同的场景。以下是它们的比较&#xff1a; 1. 一维数组 (T[]) 优点&#xff1a; 性能高&#xff1a;数组在内存中…

openAI官方prompt技巧(二)

1. 赋予 ChatGPT 角色 为 ChatGPT 指定一个角色&#xff0c;让其从特定的身份或视角回答问题。这有助于生成针对特定受众或场景的定制化回答。 例如&#xff1a; 你是一名数据分析师&#xff0c;负责我们的市场营销团队。请总结上个季度的营销活动表现&#xff0c;并强调与未…

0210作业

思维导图 作业 练习 #include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);this->setMouseTracking(true); }Widget::~Widget() {delete ui; }void Widget::mou…

Java设计模式——责任链模式与策略模式

责任链模式与策略模式的区别 文章目录 责任链模式与策略模式的区别定义与概念结构与实现应用场景总结 在软件开发中&#xff0c;设计模式是解决各种问题的有力工具。责任链模式和策略模式作为两种常见的设计模式&#xff0c;虽然都能在一定程度上提高代码的可维护性和可扩展性&…