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

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,进行后续的权限验证和业务逻辑处理。

相关推荐
子兮曰15 小时前
jev-ultrafast 深度解析:7 秒订机票的浏览器 Agent 是如何炼成的
前端·后端·agent
子兮曰15 小时前
Jev 爆发一周:7 秒 Agent 背后的 System One 生态与三场争议
前端·后端·ai编程
前端小万15 小时前
写公众号赚了 3000 块后,我做了一款叫 "一键成稿" 的软件
前端·微信小程序
爱勇宝15 小时前
ZCode 开源 24 小时:一份没有历史的账本,回答不了"有没有偷代码"
前端·后端·chatglm (智谱)
三十而立洋16 小时前
Cookie 详解:从产生到安全,一次讲透
前端·javascript
卡布鲁16 小时前
把一个 Vite + Vue3 应用塞进 qiankun (React + Umi3) 主站:十个坑的复盘
前端·javascript·react.js
汉堡大王952718 小时前
Jev:不是聊天机器人, 而是一个智能 if 语句
前端·人工智能·后端
梦想很大很大18 小时前
从运行事实到回归证据:Workrun 的 Telemetry 与 Evaluation 实践
前端·人工智能·后端
计算机魔术师18 小时前
Meta Muse agent 接入 Shopify 的 Shop Pay 实现代理式购物
前端
沙蒿同学19 小时前
我用 Go 搭了一条 AI Agent 流水线:从 1 张商品图到一整套淘宝详情页
前端·javascript·后端