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

相关推荐
小月鸭9 分钟前
如何理解HTML语义化
前端·html
jump68032 分钟前
url输入到网页展示会发生什么?
前端
诸葛韩信36 分钟前
我们需要了解的Web Workers
前端
brzhang41 分钟前
我觉得可以试试 TOON —— 一个为 LLM 而生的极致压缩数据格式
前端·后端·架构
yivifu1 小时前
JavaScript Selection API详解
java·前端·javascript
这儿有一堆花1 小时前
告别 Class 组件:拥抱 React Hooks 带来的函数式新范式
前端·javascript·react.js
十二春秋1 小时前
场景模拟:基础路由配置
前端
六月的可乐1 小时前
实战干货-Vue实现AI聊天助手全流程解析
前端·vue.js·ai编程
一 乐2 小时前
智慧党建|党务学习|基于SprinBoot+vue的智慧党建学习平台(源码+数据库+文档)
java·前端·数据库·vue.js·spring boot·学习
BBB努力学习程序设计3 小时前
CSS Sprite技术:用“雪碧图”提升网站性能的魔法
前端·html