SpringSecurity+JWT认证流程分析

news/2024/5/17 17:14:51/文章来源:https://blog.csdn.net/qq_19636353/article/details/126964919

对Spring Security+JWT认证,对整体运行流程分析。

第一步先简单了解JWT是什么,生成规则。由于我们是JWT的认证模式,需要一个操作Token的工具类,能够创建token、验证token、反解析token中的信息。

WebSecurityConfigurer

1.引入SpringSecurity依赖,使用security默认的formLogin登录界面.
2.使用自定义身份的验证组件。分析用户名密码验证流程,认证成功后,回跳到 /test 接口。
3.此时暂未涉及到使用JWT。
在这里插入图片描述

一 登录请求 formLogin

1、SpringBoot启动后,初始化UserDetailsService,用户认证信息的具体实现类;
2、访问/test接口,拦截跳转到security的form表单,输入用户名、密码提交,
3、执行loadUserByUsername,并实现用户数据访问数据库,认证通过后,返回UserDetails。
4、JwtDaoAuthenticationProvider 使用自定义身份的验证组件,实现密码对比校验。

UserDetailsService

UserDetailsServiceImpl 是用户登录访问数据库具体实现。
执行loadUserByUsername 查询通过后,返回包装好的自定义用户信息。
JwtUserDetails implements UserDetails

在这里插入图片描述

JwtAuthenticationProvider extends DaoAuthenticationProvider

使用自定义身份的验证组件, 执行登录认证过程,对用户信息进行认证工作,将密码进行对比校验。
登录时获取用户名和密码,通过authenticationManager.authenticate()方法,最终会调用UserDetailsServiceImpl来获取用户信息(在DaoAuthenticationProvider的retrieveUser中),
然后在DaoAuthenticationProvider的additionalAuthenticationChecks中校验密码。

DaoAuthenticationProvider 是用于解析并认证 UsernamePasswordAuthenticationToken 的这样一个认证服务提供者。
根据 UsernamePasswordAuthenticationToken获取到username,然后调用 UserDetailsService 检索用户详细信息。

密码校验
在这里插入图片描述

二 登录接口 /login

1、新增登录接口(不使用formLogin), 执行登录认证过程。
2、认证成功,存储认证信息到上下文。
3、声成令牌并返回给客户端。
在这里插入图片描述

JwtAuthenticatioToken

JwtAuthenticatioToken extends UsernamePasswordAuthenticationToken

authenticationManager.authenticate() 是走的 UsernamePasswordAuthenticationManager
向下,执行loadUserByUsername 认证通过后,返回UserDetails
在这里插入图片描述

三 token的过滤校验

将登录返回的token 放入test接口的Authority Bearer 中,带上token则可以成功验证并访问接口。

在这里插入图片描述

资料地址

https://blog.csdn.net/m0_64821673/article/details/122259790
https://blog.csdn.net/typ1805/article/details/110518788

SpringSecurity+JWT实现认证及授权详细步骤
https://blog.csdn.net/sunao1106/article/details/126136701

多个请求共享认证信息
https://blog.csdn.net/yuanlaijike/article/details/84703690

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_11392.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

类——C++

C是面向过程的编程语言,重在过程,比如进行栈的操作,需要建立一个栈,初始化,push数据,pop数据,销毁栈等操作,这就是过程 C是面向对象的编程语言,重在处理对象与对象之间的…

vue打包项目版本号自加

原因 项目每次打包后都需要改动项目版本号,这个改动每次都需要在package.json中修改version,比较麻烦,到底有没有一种打包后版本号自加的办法。 方案 版本号自加其实可以使用fs修改文件来实现的。 具体思路是:在执行打包命令npm run build时,同时执行一段js代码,该代码通…

第六章 logstash学习(二)

一、ELK搭建 1.ES搭建 2.logstash搭建 1)安装java环境 2)安装logstash 3)配置环境变量 4)logstash的插件 INPUT:插件使Logstash能够读取特定的事件源。 OUTPUT:插件将事件数据发送到特定的目的地,OUTPUT是事件流水线中的最后阶段。INPUT支持事件源 OUTPUT支持输出源 COD…

【概率论与数理统计】【线性代数】计算机保研复习

我他妈写一上午了直接没了,这狗csdn,别在已发布的文章上改,辣鸡玩意儿。 复习概率论与数理统计1.基础2.贝叶斯公式3.大数定律(Law of the large numbers)4.中心极限定理5.最大似然估计6. 期望、方差和协方差面试题线性…

软件设计师2014上午题基础知识(易错整理)

软件设计师2014上午题基础知识&#xff08;易错整理&#xff09; 2014 上半年 木马程序的客户端运行在攻击者的机器上 海明码检验位计算&#xff1a;有效信息位 校验位个数 < 2^校验位个数 - 1 防火墙工作层次越低&#xff0c;工作效率越高&#xff0c;安全性越低 读音…

git 命令 简单介绍

爱无路&#xff0c;恨无情。相思无缘&#xff0c;相爱无份。曾相识&#xff0c;恨离别。无风雨&#xff0c;无同舟&#xff0c;何结果。情远天边&#xff0c;心无挂碍&#xff0c;唯爱你独一。 git简单介绍 三个区 工作区(working diretory) 用于修改文件 缓存区(stage) 是用…

zabbix的rpm包部署

1. 环境准备&#xff1a; 镜像版本虚拟机地址Rocky Linux release 8.6192.168.188.201 2. RockyLinux更换镜像源&#xff1a; [rootzabbix ~]# sed -i.bak \ -e s|^mirrorlist|#mirrorlist| \ -e s|^#baseurl|baseurl| \ -e s|dl.rockylinux.org/$contentdir|mirrors.nju.e…

计算机毕业设计之java+javaweb的新冠疫情下的校园出入系统

计算机毕业设计之javajavaweb的新冠疫情下的校园出入系统 项目介绍 随着信息化时代的到来,管理系统都趋向于智能化、系统化,新冠疫情下的校园出入系统也不例外,但目前国内的市场仍都使用人工管理,市场规模越来越大,同时信息量也越来越庞大,人工管理显然已无法应对时代的变化,而…

内核中oops 错误解析以及问题定位

目录 一、oops输出解析 二、工具 1、objdump 2、gdb 3、addr2line 4、decodecode 5、faddr2line 文档最后有完整的oops输出文件&#xff0c;此处将输出分成多个小块进行分析。 一、oops输出解析 [ 2620.950912] oops_tryv1:try_oops_init():37: Lets Oops!Now …

vue里使用虚拟列表处理element-ui的el-select选择器组件数据量大时卡顿问题

问题 当我们使用el-select选择器下拉数据很大的时候&#xff0c;会出现页面卡顿&#xff0c;甚至卡死的情况&#xff0c;用户体验很不好。我目前采取的方案是使用虚拟列表的方式去处理这个问题。 实现效果 数据获取完毕&#xff1a; 点击输入框&#xff1a;我们可以看到 2 万…

高频读写头CK-FA521-2M应用与选型注意事项

CK-FA521-2M为高频读写头&#xff0c;工作频率为13.56Mhz&#xff0c;通过同轴线缆与读卡器相连。使用ABS&#xff0b;铝合金作为读写头的外壳&#xff0c;适用于潮湿、粉尘、油污等恶劣环境&#xff0c;防护等级高。读写头具有识别标签距离远&#xff0c;抗干扰能力强&#xf…

Android移动应用开发之界面跳转

文章目录主要文件目录activity_main.xmldemo.xmlMainActivityActivity_Demo运行主要文件目录 主要实现的功能就是点击按钮能够实现界面的跳转。 activity_main.xml 主界面&#xff0c;包含一个按钮 <?xml version"1.0" encoding"utf-8"?> <a…

pdf转ppt的简单方法,包你一学就会

每个职场人的必备技能就是要能做一个“完美”的PPT&#xff0c;在做PPT之前肯定也少不了资料收集的过程。有的人收集资料时找到的是PDF格式的文档&#xff0c;这时候你可能就会想&#xff0c;如果能把PDF的内容直接就转还成一个PPT文档就好了。事实上这的确能办到&#xff0c;而…

2020年居家实习日志

这篇文章是我2020年在校期间疫情居家实习的日志&#xff0c;当时实习获得了很高的成绩&#xff0c;因为已经毕业挺久了觉得现在就放上来也对我也没有影响&#xff0c;还能给大家提供一个实习的模板&#xff08;膨胀&#xff09;帮助当前同样因疫情被迫居家实习广大计算机类专业…

新书推荐——华为·无线局域网应用技术(微课版丨第2版)

新书推荐——华为无线局域网应用技术&#xff08;微课版丨第2版&#xff09; 近日&#xff0c;由正月十六工作室组编&#xff0c;黄君羡主编的教材《无线局域网应用技术&#xff08;微课版丨第2版&#xff09;》在人民邮电出版社正式出版。 无线局域网应用技术微课版丨第2版组…

app自动化测试(iOS)元素定位

除了通用定位方式外&#xff0c;iOS 还有其他特殊的定位方式&#xff0c;本章节仅介绍 iOS 特有定位。 PredicateString定位 样本元素截图&#xff1a; 使用 PredicateString&#xff0c;基本定位方式是由元素属性名、运算符、目标值组成。 元素属性 比较运算符 &#xff…

vue基础的一些实例推荐收藏

data&#xff1a;数据 用于存储数据&#xff0c;这里的数据可以全局使用 当数据发生变化时&#xff0c;会自动更新相关DOM元素 methods&#xff1a;方法 用于存储各种方法 方法里面的this是当前vue对象 指令&#xff1a;就是vue提供的一套属性&#xff0c;都是v-开头 metho…

免费题库接口

免费题库接口 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 查题校园题库&#xff1a;查题校园题库后台&#xff08;点击跳转&a…

锡装股份深交所上市:市值59亿 曹洪海身价36亿

雷递网 雷建平 9月20日无锡化工装备股份有限公司&#xff08;简称&#xff1a;“锡装股份”&#xff0c;证券代码&#xff1a;001332&#xff09;今日在深交所主板上市。锡装股份本次公开发行2000万股&#xff0c;发行价为59.90元&#xff0c;募资11.98亿元。锡装股份收盘价为7…

(万字详解)指针进阶

前面博客已经更新了初阶的指针&#xff0c;接下来我们来详细地学习进阶指针的内容。 目录 1. 字符指针 2. 指针数组 3. 数组指针 3.1 数组指针的定义 3.2 &数组名VS数组名 3.3 数组指针的使用 4. 数组参数、指针参数 4.1 一维数组传参 4.2 二维数组传参 4…