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

相关推荐
m0_748241701 小时前
前端视角下的Go语法学习:创建 Go 项目
前端·学习·golang
珹洺1 小时前
Bootstrap-HTML(五)图像基础样式
前端·javascript·css·网络·bootstrap·html·ecmascript
爱上语文1 小时前
前端成长之路:HTML(4)
前端·html
难以触及的高度1 小时前
Linux中所有和$有关的操作
linux·服务器·前端
余子桃2 小时前
VUE在TS中变量或函数穿透在别的页面进行调用
前端·javascript·vue.js·前端框架·ecmascript
java_heartLake2 小时前
Vue3之响应式系统详解
前端·javascript·vue.js
NoneCoder3 小时前
CSS系列(15)-- 性能优化详解
前端·css·性能优化
乐茵安全4 小时前
基于python绘制数据表(上)
java·前端·python
徐小夕4 小时前
开发在线协同文档编辑器,分享几点我的思考
前端·javascript·vue.js