jwt以及加密完善博客系统
目录
一、背景
二、传统登陆功能&强制登陆功能
1、传统的实现方式
2、session存在的问题
三、jwt--令牌技术
1、实现过程
2、令牌内容
3、生成令牌
4、检验令牌
四、JWT登陆功能&强制登陆功能
1、JWT实现登陆功能
2、强制登陆功能
3、运行效果
五、加密/加盐
1、加密方式
2、基于MD5的加密
(1)MD5弊端
(2)加盐
(3)生成加密密码
六、博客系统部分代码
一、背景
现已经完成了博客系统的发布博客功能、更新博客功能、显示博客列表页功能、显示详情页功能、删除博客功能、退出博客登陆功能,还有登陆功能、强制登陆功能还未实现。前面已完成的功能主要使用了mybatis的增、改、查等功能,和前面的图书系统较为相似,此处不再做详细介绍,文章结尾附上主要代码。
二、传统登陆功能&强制登陆功能
1、传统的实现方式
客户端输入密码和用户名--->服务器根据用户名去数据库查找密码--->数据库密码和用户密码进行比较--->相同完成登陆并将内容存储在session中--->强制登陆时判断有无session即可。


2、session存在的问题
但此时这种方法会存在问题:
(1)为了保证项目不因为一个服务器挂了,我们通常会采用多机部署项目,试想一下,若登陆请求我们发送给了服务器1,服务器1正确响应并在内存中保存了session信息,将sessionId通过Cookie发送给客户端。客户端在登陆的前提下带着SessionId再次进行其他请求,此时若将请求发送给了服务器2,服务器2根据sessionId查找session信息,发现服务器2没有保存,此时就会认为客户端未登陆,但其实客户端在服务器1上已经登陆了。session实现强制登陆时,不能满足多机部署。
(2)在重启服务器时,session信息就没了,若用户刚登录服务器重启了,此时就会要求用户重新登陆,带来不好的用户体验。
(3)用户的session信息都保存在服务器内存中,若用户很多,session信息就多,占用的内存就大,导致服务器挂掉的风险也大。
三、jwt--令牌技术
1、实现过程
客户端输入密码和用户名--->服务器根据用户名去数据库查找密码--->数据库密码和用户密码进行比较--->相同完成登陆并给客户端一个令牌--->强制登陆时服务器判断有无令牌即可,且令牌内容不能改变,若改变就失效了。
2、令牌内容

令牌包含三部分的内容:
(1)Header---头部
头部包含jwt使用的算法(如HS256)以及jwt的类型。
(2)Payload---负载
负载是存放有效信息的地方,类似session,可以自定义,也可以存放令牌过期时间。此部分可以解码还原原始内容。
(3)Signature---签名
签名部分可以防止jwt内容被篡改,签名是基于头部和载荷计算得出的,同时也使用了安全密钥进行加密,若jwt中任何一个字符改变,进行验证时以同样的密钥签名头部和载荷,发现两次签名不同,就会导致令牌失效。jwt的内容可以公布,不是进行了加密,而是保证了唯一性,防止被篡改。(类似于身份证)。
3、生成令牌
先引入依赖:


生成的jwt内容为:
eyJhbGciOiJIUzI1NiJ9.eyJpZCI6MSwidXNlcm5hbWUiOiJsaXNpIiwiaWF0IjoxNzEwNTc2NjcwLCJleHAiOjE3MTA1ODAyNzB9.FQQTi586Wp_9S-tCjO1rmHhHqSuFWdkXF3KlLcotgFU
解析该jwt:

4、检验令牌

运行结果:

只要结果不为空就表明令牌是正确的。
四、JWT登陆功能&强制登陆功能
1、JWT实现登陆功能
后端处理:

前端请求+响应:

2、强制登陆功能
使用拦截器进行强制登陆,判断用户令牌是否正确。从本地存储中拿出令牌放在请求header中,根据拿到的内容判断是否能拿到负载内容。
由于每个页面都要进行强制登陆判断,所以将从本地存储中拿出令牌放在请求header中的操作统一放在common.js中,且要在发送请求前放在header中:


3、运行效果


此时就能正确显示博客列表页了。
五、加密/加盐

对于数据库中的敏感信息:例如密码等,需要对其加密,不然黑客入侵后就会获取到用户的密码,造成一定的损失。
1、加密方式
(1)对称加密
对于明文的加密和密文的解密使用的是同一种密钥。常见算法有:AES,DES,3DES,RC4,RC5,RC6
(2)非对称加密
明文的加密采用公钥,密文的解密采用私钥。公钥可以公开,私钥不可以公开。常见算法有:RSA,DSA,ECDSA,ECC;
(3)摘要加密
将任意长度的明文转为固定长度的数据,不可逆,无法解密。对于相同的明文,进行摘要加密后结果相同。常见算法有:MD5,SHA1,SHA2,CRC。
2、基于MD5的加密
(1)MD5弊端
博客系统采用MD5加密方式,将密码转换为固定长度的数据。但只使用MD5存在弊端:
①虽然MD5不可逆,但对于密码较短的,可以借助工具进行解密;
②密码一样的用户,MD5转换后是一样的,一旦一个用户暴露,其他也会暴露。
(2)加盐
可以对于密码加上固定长度的随机值(盐值),明文+盐值---->进行MD5加密。
还需考虑一个问题:在进行验证时,我们如何拿到盐???
可以将盐值插入在MD5加密后的数据里,验证时分离出加密结果和盐值即可。
为了简单:我们就直接将盐值拼接在加密结果后面了。
(3)生成加密密码

将数据库修改为:

进行登陆验证:


六、博客系统部分代码
1、登陆功能
(1)客户端请求+响应


(2)服务器响应

2、展示博客列表功能
(1)客户端请求+响应

(2)服务器响应


3、展示博客详情功能
(1)客户端请求+响应

(2)服务器响应

4、更新博客功能
(1)客户端请求+响应

(2)服务器响应

5、删除博客功能
(1)客户端请求+响应

(2)服务器响应

6、发布博客功能
(1)客户端请求+响应

(2)服务器响应

7、退出博客登陆

8、强制登陆功能


若需要全部源码,可以进入:葛雅宁 (ge-yaning) - Gitee.com
点击java学习下的基于spring下的博客管理系统:

相关文章:
jwt以及加密完善博客系统
目录 一、背景 二、传统登陆功能&强制登陆功能 1、传统的实现方式 2、session存在的问题 三、jwt--令牌技术 1、实现过程 2、令牌内容 3、生成令牌 4、检验令牌 四、JWT登陆功能&强制登陆功能 1、JWT实现登陆功能 2、强制登陆功能 3、运行效果 五、加密/加…...
elk收集k8s微服务日志
一、前言 使用filebeat自动发现收集k8s的pod日志,这里分别收集前端的nginx日志,还有后端的服务java日志,所有格式都是用json格式,建议还是需要让开发人员去输出java的日志为json,logstash分割java日志为json格式&#…...
vue3中如何实现多个侦听器(watch)
<body> <div id"app"><input type"button" value"更改名字" click"change"> </div> <script src"vue.js"></script> <script>new Vue({el: #app,data: {food: {id: 1,name: 冰激…...
【深度学习基础知识】IOU、GIOU、DIOU、CIOU
这里简单记录下IOU及其衍生公式。 为了拉通IOU及其衍生版的公式对比,以及方便记忆,这里用一个统一的图示来表示出所有的参数 【A】目标框的区域【B】预测框的区域【C】A与B的交集【ÿ…...
【自用笔记】单词
cognitive 认知formulation 阐述方式nonlinear 非线性nonconvex 非凸,无最优解cumulative return 累计回报propagation 传播optimization 优化objective 目标标准差(standard deviation)正态分布(Normal distribution)…...
Linux之shell条件判断
华子目录 if语句单分支案例 双分支案例 多分支 case多条件判断格式执行过程示例 if语句 单分支 # 语法1: if <条件表达式> then指令 fi#语法2: if <条件表达式>;then指令 fi案例 编写脚本choice1.sh,利用单分支结构实现输入2个整数&#…...
“postinstall“: “patch-package“ 修补安装包补丁
在 package.json 文件里,postinstall 是一个钩子脚本,它在每次运行 npm install 命令后自动执行。当你在该字段中指定 "patch-package" 时,意思是在 npm install 安装所有依赖包之后,自动运行 patch-package 命令。 pa…...
PHP+MySQL开发组合:多端多商户DIY商城源码系统 带完整的搭建教程以及安装代码包
近年来,电商行业的迅猛发展,越来越多的商户开始寻求搭建自己的在线商城。然而,传统的商城系统往往功能单一,无法满足商户个性化、多样化的需求。同时,搭建一个功能完善的商城系统需要专业的技术团队和大量的时间成本&a…...
Node.js常用命令
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它使得开发者可以使用 JavaScript 来编写服务端的应用。Node.js 提供了大量的命令行工具,以下是一些最常用的 Node.js 命令: 1. node 运行 JavaScript 文件:node [fil…...
LeetCode 2. 两数相加
目录 题目题目描述示例 1:示例 2:示例 3:提示:原题链接 题解解题思路代码实现(C) 题目 题目描述 给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的…...
抖去推无人直播+矩阵托管+AI文案撰写一体化工具如何开发搭建
一、 开发和搭建抖去推无人直播矩阵托管AI文案撰写一体化工具需要以下步骤: 确定功能需求:确定抖去推无人直播、矩阵托管和AI文案撰写的具体功能需求,如直播推流、直播管理、托管服务、AI文案生成等。 技术选型:选择适合开发该工…...
【鸿蒙HarmonyOS开发笔记】常用组件介绍篇 —— 弹窗组件
简介 弹窗是移动应用中常见的一种用户界面元素,常用于显示一些重要的信息、提示用户进行操作或收集用户输入。ArkTS提供了多种内置的弹窗供开发者使用,除此之外还支持自定义弹窗,来满足各种不同的需求。 下面是所有涉及到的弹窗组件官方文档…...
【嵌入式学习】Qtday03.21
一、思维导图 二、练习 自由发挥登录窗口的应用场景,实现一个登录窗口界面。(不要使用课堂上的图片和代码,自己发挥,有利于后面项目的完成) 要求: 1. 需要使用Ui界面文件进行界面设计 2. ui界面上的组件…...
【C语言】C语言运算符优先级详解
文章目录 📝前言🌉运算符优先级简述 🌠逻辑与和逻辑或🌉赋值和逗号运算符 🌠位运算🌉条件表达式🌉位运算与算术运算结合🌉混合使用条件表达式和赋值运算符🌉 逗号运算符的…...
第十节HarmonyOS 常用容器组件3-GridRow
1、描述 栅格容器组件,仅可以和栅格子组件(GridCol)在栅格布局场景中使用。 2、子组件 可以包含GridCol子组件。 3、接口 GridRow(options:{columns: number | GridRowColumnOption, gutter?: Length | GutterOption, Breakpoints?: B…...
SCXI-1193是National Instruments公司生产的吗?
NI SCXI-1193是一款高密度、32通道RF多路复用器开关模块。 NI SCXI-1193 是一款由 National Instruments(NI)公司生产的屏蔽式电缆。这款电缆通常用于连接数据采集设备和传感器或执行器,以实现信号传输和数据采集。SCXI-1193 电缆具有高度灵活…...
使用clion开发tftlcd屏,移植驱动时遇到的问题记录
问题现象 屏幕只有一半屏在刷新 问题出现的情况(在CLION开发时遇到过) 总结...
工程信号的去噪和(分类、回归和时序)预测
🚀【信号去噪及预测论文代码指导】🚀 还为小论文没有思路烦恼么?本人专注于最前沿的信号处理与预测技术——基于信号模态分解的去噪算法和深度学习的信号(回归、时序和分类)预测算法,致力于为您提供最精确、…...
【VUE】前端阿里云OSS断点续传,分片上传
什么是OSS: 数据以对象(Object)的形式存储在OSS的存储空间(Bucket )中。如果要使用OSS存储数据,您需要先创建Bucket,并指定Bucket的地域、访问权限、存储类型等属性。创建Bucket后,您…...
春招面试高频题目总结
面试问题 redis 可以用于进程间通信吗? Why?How? ---> 延展一下 有哪些进程间通信技术, 优劣如何? 有大量的插入sql语句,一条条的插入性能很差,如何通过事务进行优化? 保证线程安全的策略有哪些&…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?
Otsu 是一种自动阈值化方法,用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理,能够自动确定一个阈值,将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
企业如何增强终端安全?
在数字化转型加速的今天,企业的业务运行越来越依赖于终端设备。从员工的笔记本电脑、智能手机,到工厂里的物联网设备、智能传感器,这些终端构成了企业与外部世界连接的 “神经末梢”。然而,随着远程办公的常态化和设备接入的爆炸式…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
虚拟电厂发展三大趋势:市场化、技术主导、车网互联
市场化:从政策驱动到多元盈利 政策全面赋能 2025年4月,国家发改委、能源局发布《关于加快推进虚拟电厂发展的指导意见》,首次明确虚拟电厂为“独立市场主体”,提出硬性目标:2027年全国调节能力≥2000万千瓦࿰…...
DingDing机器人群消息推送
文章目录 1 新建机器人2 API文档说明3 代码编写 1 新建机器人 点击群设置 下滑到群管理的机器人,点击进入 添加机器人 选择自定义Webhook服务 点击添加 设置安全设置,详见说明文档 成功后,记录Webhook 2 API文档说明 点击设置说明 查看自…...
