satoken 后端获取用户id的原理是啥 用了前端传的那个参数

news/2024/12/14 9:16:41/

Sa-Token 框架中,后端获取用户 ID 的过程与前端传递的参数密切相关。Sa-Token 是一个基于 JWT 的轻量级权限管理框架,主要用于解决权限控制、登录管理等问题。具体来说,后端如何获取用户 ID,取决于你前后端如何设计以及 Sa-Token 的配置。

原理解析

  1. 前端如何传递用户标识信息

    • 一般来说,前端在用户登录后会从后端获取一个包含用户信息(如用户 ID、权限等)的令牌。这个令牌通常是通过 JWT 或类似的机制生成的,并且保存在客户端(比如 localStoragesessionStorage 或者 cookies 中)。
    • 前端在后续的请求中,将令牌放入请求头中,通常是放在 Authorization 字段下,或者某些框架可能会使用特定的请求头字段,如 sa-token
  2. 后端如何提取用户 ID: 后端可以通过 Sa-Token 提供的工具方法来解析客户端传递的令牌,从中提取出用户的标识信息(如用户 ID)。具体的流程如下:

    • 步骤 1:客户端将令牌传递给后端(通常是放在请求头的 Authorization 字段)。
    • 步骤 2:后端接收到请求后,使用 Sa-Token 框架提供的 API(比如 StpUtil.getLoginId())从令牌中提取出用户的登录 ID。
  3. Sa-Token 后端获取用户 ID 的方法Sa-Token 框架提供了一个方便的工具类 StpUtil 来操作和管理用户的认证信息。具体来说,StpUtil.getLoginId() 方法可以直接获取当前登录用户的 ID。Sa-Token 会从请求中的令牌中解析出用户的身份信息,并且默认情况下会把用户的 ID 存储在 token 对象中。

    • 获取当前登录用户的 ID

       

      javaCopy Code

      String userId = StpUtil.getLoginId();
    • StpUtil.getLoginId() 会自动从请求头的 Authorization 中获取令牌,解析并返回用户的 ID。如果令牌有效且没有过期,框架会解析出其中的用户信息。

  4. 令牌的原理Sa-Token 使用的是无状态的令牌(通常是 JWT)。JWT 中会存储用户的标识信息(如用户 ID)。该令牌通过加密签名的方式保证其不被篡改。后端通过验证签名来确保令牌的有效性,进而从中提取出用户 ID。

流程总结:

  1. 用户登录成功,前端从后端获取一个包含用户信息的令牌(通常是 JWT)。
  2. 前端将该令牌保存在本地存储(如 localStoragesessionStoragecookie)中。
  3. 前端在每次请求时,将令牌放入请求头中,通常是 Authorization 字段。
  4. 后端通过 StpUtil.getLoginId() 方法,从请求头中获取并验证令牌,解析出其中的用户 ID(或登录 ID)。
  5. 后端使用获取到的用户 ID 进行权限控制、数据访问等操作。

例子:

  1. 前端发送请求: 假设前端将令牌保存在 localStorage 中,并且每次请求时将令牌放入请求头:

     

    javascriptCopy Code

    const token = localStorage.getItem("token"); // 获取存储的token fetch('https://your-api.com/endpoint', { method: 'GET', headers: { 'Authorization': `Bearer ${token}`, // 传递 token }, });
  2. 后端解析令牌并获取用户 ID: 在后端的控制器或服务中,使用 StpUtil.getLoginId() 获取用户 ID:

     

    javaCopy Code

    @RestController public class MyController { @GetMapping("/endpoint") public String getUserInfo() { // 获取当前登录的用户ID String userId = StpUtil.getLoginId(); return "当前登录用户的ID是: " + userId; } }
  3. JWT 内的用户标识: 令牌中的 payload 可能包含如下信息(例如一个 JWT):

     

    jsonCopy Code

    { "sub": "1234567890", // 用户ID "name": "John Doe", "iat": 1516239022 }

总结:

后端获取用户 ID 的原理基于以下几点:

  • 前端通过 Authorization 请求头传递登录令牌(如 JWT)。
  • 后端通过 Sa-Token 提供的工具方法(如 StpUtil.getLoginId())获取令牌,并从中解析出用户 ID。
  • Sa-Token 提供了简洁的 API 和内置机制,帮助后端轻松管理用户认证和权限。

这样,后端就可以通过从请求头中解析得到的令牌,提取出当前登录的用户 ID,进行后续的权限验证和业务逻辑处理。


http://www.ppmy.cn/news/1554978.html

相关文章

vue项目通过appendChild()函数向页面上追加组件

前言: 此篇文章自己结合项目和文档自己理解的,作用于往后遇见此类开发需求时参考。 正文: 1、createApp() 创建一个应用程序实例 function createApp(rootComponent: Component, rootProps?: object): App 第一个参数是根组件。第二个可选…

Scratch节日作品 | 圣诞节礼物——体验节日的温馨与编程的乐趣! ❄️

今天为大家推荐一款充满节日氛围的Scratch作品——《圣诞礼物》!这款程序不仅带来了雪花飘落、圣诞老人和麋鹿的经典场景,还通过编程的形式让小朋友们体验到收到礼物的喜悦。通过这款游戏,小朋友们能学习编程知识、了解圣诞文化,同…

顺序表的使用,对数据的增删改查

主函数: 3.c #include "3.h"//头文件调用 SqlListptr sql_cerate()//创建顺序表函数 {SqlListptr ptr(SqlListptr)malloc(sizeof(SqlList));//在堆区申请连续的空间if(NULLptr){printf("创建失败\n");return NULL;//如果没有申请成功&#xff…

VS2022 ASP.NET core Web API 示例代码解释

0. 项目结构 在创建ASP.NET Core Web API项目后,项目的基本结构如下: MyWebApiProject │ Controllers │ └── WeatherForecastController.cs │ Program.cs │ WeatherForecast.cs │ appsettings.json │ ...1. Program.cs 这个文件…

uni-app开发App注意事项

技术选择 分包目前不支持Vue3 个人选择考虑: 1、vue2由于官方不维护了,所以uniapp也不维护了。 2、vue3使用proxy,不支持ios9。 3、目前插件市场中 vue2开发的插件占比更大。 4、如果app页面较多,需要开启分包,但…

Ubuntu中iptables默认是开启的吗

不,Ubuntu 中 iptables 默认不是开启的。 虽然 Ubuntu 系统默认安装了 iptables 软件包(你可以通过 dpkg -l iptables 或 which iptables 命令来验证),但这并不意味着 iptables 规则已经生效。实际上,iptables 的规则…

Windows通过指令查看已安装的驱动

Windows通过指令查看已安装的驱动 在 Windows 操作系统中,有几种命令可以用来查看已安装的驱动程序。以下是常见的几种方法: 1. 使用 pnputil 查看已安装驱动程序 pnputil 是一个 Windows 内置工具,可以列出所有已安装的驱动程序包。 命令…

【Linux】Systemtap在CentsOS9上测试成功了

在Ubuntu上测试没有成功,先看看运行成功的效果吧: 看到运行的效果,可以安心些,哈哈 指导操作来源于这里:SystemTap 主要来源于这里: https://sourceware.org/systemtap/SystemTap_Beginners_Guide/using-s…