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

embedded/2025/2/11 7:16:13/

登录功能

这里使用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/embedded/161267.html

相关文章

19.1.1 DDL

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 DDL主要用于数据库、表、存储等对象的创建修改和删除。 使用DDL语句创建一个数据表&#xff0c;常用的语法是&#xff1a; CREATE…

Linux(CentOS)安装 Nginx

CentOS版本&#xff1a;CentOS 7 Nginx版本&#xff1a;1.24.0 两种安装方式&#xff1a; 一、通过 yum 安装&#xff0c;最简单&#xff0c;一键安装&#xff0c;全程无忧。 二、通过编译源码包安装&#xff0c;需具备配置相关操作。 最后附&#xff1a;设置 Nginx 服务开…

python内置库之getpass、msvcrt:密码安全输入(keyring+getpass、msvcrt实现密码安全管理)

目录 getpass的用法 输入 获取用户名 msvcrt库实现输入加密 getpasskeyring实现密码安全存储及获取 python之keyring库&#xff1a;安全密码管理库&#xff0c;不同平台service_name、username的获取-CSDN博客 中介绍了使用keyring库进行密码的安全存储&#xff0c;但是也…

如何在 Java 应用中实现数据库的主从复制(读写分离)?请简要描述架构和关键代码实现?

在Java应用中实现数据库主从复制&#xff08;读写分离&#xff09; 一、架构描述 &#xff08;一&#xff09;整体架构 主库&#xff08;Master&#xff09; 负责处理所有的写操作&#xff08;INSERT、UPDATE、DELETE等&#xff09;。它是数据的源头&#xff0c;所有的数据变…

支持Windows和Linux系统的Python定时关机脚本

以下是一个支持Windows和Linux系统的Python定时关机脚本&#xff0c;允许设置定时关机或取消关机计划&#xff1a; import sys import os import datetime import ctypes import redef is_admin():"""检查是否具有管理员权限"""if os.name nt:…

Mp4视频播放机无法播放视频-批量修改视频分辨率(帧宽、帧高)

背景 家人有一台夏新多功能 视频播放器(夏新多功能 视频播放器),用来播放广场舞。下载了一些广场舞视频, 只有部分视频可以播放,其他视频均无法播放,判断应该不是帧速率和数据速率的限制, 分析可能是播放器不支持帧高度大于720的视频。由于视频文件较多,需要借助视频编…

DeepSeek全球第二,R1生态扩展,华为荣耀接入,OpenAI推出深度研究,谷歌Gemini 2.0发布!AI Weekly 2.3-2.9

&#x1f4e2;本周AI快讯 | 1分钟速览&#x1f680; 1️⃣ &#x1f6a8;DeepSeek发布官方声明&#xff1a;警示仿冒账号和不实信息&#xff0c;官方渠道已公布&#xff0c;谨防假冒。 2️⃣ &#x1f50d;秘塔AI集成DeepSeek-R1&#xff1a;智能搜索&推理能力升级&#…

git连接——问题

根据你提供的错误信息&#xff0c;Git 无法通过 git:// 协议连接到 GitHub。这可能是由于以下几种原因&#xff1a; 网络问题&#xff1a;某些网络环境可能会阻止 Git 协议&#xff08;git://&#xff09;的访问。代理配置问题&#xff1a;如果你在使用代理服务器&#xff0c;…