认证授权 4 Spring Security + JWT(总览与
2021-05-06 本文已影响0人
_River_
1:项目代码结构 总览
![](https://img.haomeiwen.com/i7912723/6c9c1ebf499d4722.png)
绿色:最核心的代码
JwtTokenUtils:JwtToken的创建与使用
JwtAuthorizationFilter:自定义鉴权过滤器 获取Token信息到SecurityContextHolder
SecurityConfiguration:Spring-Security 使 SpringMVC 集成了 Spring Security 的 web 安全
红色:实体 常量 枚举
蓝色:调用主逻辑
黄色:Spring-Security的一些源码(可以不看)
2:项目逻辑 总览
JWT 实际上就是存储用户信息的Token
Spring Security 实际上就是就SpringMvc集成Web安全的一种鉴权手段
1:创建用户 用户信息存放到Mysql中
2:用户登录 JwtTokenUtils 使用用户信息 创建JWT 并存储到Redis中
3:用户调用 不放行接口 JwtAuthorizationFilter 把JWT的部分用户信息存储到SecurityContextHolder
4:SecurityContextHolder 中 用户信息提供给全局使用
5:SecurityConfiguration 进行真正意义上的鉴权过滤 确保仅该用户具有相关权限时才能调用接口
6:用户退出登录 在Redis删除对应的中JWT信息
3:注册用户
请求路径:http://127.0.0.1:7001/api/users/sign-up
请求方式:Post请求 设置为JSON请求格式
请求参数:{"userName":"HSJ","fullName":"我的昵称","password":123456}
Mysql数据库插入数据
![](https://img.haomeiwen.com/i7912723/ee0295b6e99f5905.png)
![](https://img.haomeiwen.com/i7912723/d7769c972dcb9370.png)
![](https://img.haomeiwen.com/i7912723/71d32d4bb7c309f9.png)
4:用户登录
请求路径:http://127.0.0.1:7001/api/auth/login
请求方式:Post请求 设置为JSON请求格式
请求参数:{"userName":"HSJ","password":123456,"rememberMe":true}
Redis已经插入JWT数据
![](https://img.haomeiwen.com/i7912723/f6589ac64b2443a7.png)
![](https://img.haomeiwen.com/i7912723/9f05c5219e7d71b2.png)
5:不带Token访问需要进行身份验证的资源
请求路径:http://127.0.0.1:7001/api/users/find/allUser
请求方式:Get请求 表单
请求参数:current=1 (当前页) size =1 (每页显示条数)
请求头:无
注意:状态码为401 不提供Token或者Token错误
![](https://img.haomeiwen.com/i7912723/6996cfe1249e18d1.png)
![](https://img.haomeiwen.com/i7912723/975244c914c948fc.png)
6:携带正确的有权限的 Token访问需要进行身份验证的资源
请求路径:http://127.0.0.1:7001/api/users/find/allUser
请求方式:Get请求 表单
请求参数:current=1 (当前页) size =1 (每页显示条数)
请求头:Authorization
Bearer
eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiJIZVN1aUppbiIsInJvbCI6IlJPTEVf
VVNFUixST0xFX01BTkFHRVIiLCJqdGkiOiIxIiwic3ViIjoiSFNKIiwiaWF0IjoxNjIwMTUxMzA
4LCJleHAiOjE2MjA3NTYxMDh9.XL96qmlpkJCN6_wvwwMkATSvqT8xhceeZ_tZ298SjAM
![](https://img.haomeiwen.com/i7912723/f9fa83b0d9dc56df.png)
![](https://img.haomeiwen.com/i7912723/2134a5ee6c787db5.png)
7:携带正确的但没权限的 Token访问需要进行身份验证的资源
请求路径:http://127.0.0.1:7001/api/users/find/allUser
请求方式:Post请求 设置为JSON请求格式
请求参数:{"userName":"HSJ","fullName":"我是修改昵称啊"}
请求头:Authorization
Bearer
eyJ0eXBlIjoiSldUIiwiYWxnIjoiSFMyNTYifQ.eyJpc3MiOiJIZVN1aUppbiIsInJvbCI6IlJPTEVf
VVNFUixST0xFX01BTkFHRVIiLCJqdGkiOiIxIiwic3ViIjoiSFNKIiwiaWF0IjoxNjIwMTUxMzA
4LCJleHAiOjE2MjA3NTYxMDh9.XL96qmlpkJCN6_wvwwMkATSvqT8xhceeZ_tZ298SjAM
注意:状态码为403 代表该token 无权限进行该操作
![](https://img.haomeiwen.com/i7912723/dbe58f0d5c669f75.png)
![](https://img.haomeiwen.com/i7912723/c423cea919c77441.png)
项目连接
请配合项目代码食用效果更佳:
项目地址:
https://github.com/hesuijin/hesuijin-study-project
Git下载地址:
https://github.com.cnpmjs.org/hesuijin/hesuijin-study-project.git
spring-security-jwt-module 项目模块下