sa-token源码解析二

sa-token-rz

SaManager 

SaManager 负责管理 Sa-Token 所有运行时对象

SaManager.getConfig();              // 获取全局配置对象 
SaManager.getSaTokenDao();          // 获取数据持久化对象 
SaManager.getStpInterface();        // 获取权限认证对象 
SaManager.getSaTokenAction();       // 获取框架行为对象
SaManager.getSaTokenContext();      // 获取上下文处理对象
SaManager.getSaTokenListener();     // 获取侦听器对象 
SaManager.getSaTemp();              // 获取临时令牌认证模块对象 
SaManager.getStpLogic("type");      // 获取指定账号类型的StpLogic对象 

SaHolder

Sa-Token上下文持有类,通过此类快速获取当前环境的相关对象

SaHolder.getRequest();           // 获取当前请求的 [Request] 对象 
SaHolder.getResponse();          // 获取当前请求的 [Response] 对象 
SaHolder.getStorage();           // 获取当前请求的 [存储器] 对象

SaRouter

路由匹配工具类,详细戳:路由拦截式鉴权

SaFoxUtil

Sa-Token内部工具类,包含一些工具方法

SaFoxUtil.printSaToken();           // 打印 Sa-Token 版本字符画
SaFoxUtil.getRandomString(8);       // 生成指定长度的随机字符串
SaFoxUtil.isEmpty(str);             // 指定字符串是否为null或者空字符串
SaFoxUtil.getMarking28();           // 以当前时间戳和随机int数字拼接一个随机字符串
SaFoxUtil.formatDate(date);         // 将日期格式化为yyyy-MM-dd HH:mm:ss字符串
SaFoxUtil.searchList();             // 从集合里查询数据
SaFoxUtil.vagueMatch(patt, str);    // 字符串模糊匹配

SaTokenConfigFactory

配置对象工厂类,通过此类你可以方便的根据properties配置文件创建一个配置对象

1、首先在项目根目录,创建一个配置文件:sa-token.properties

2、然后使用以下代码获取配置对象

# token名称 (同时也是cookie名称)
tokenName=satoken
# token有效期,单位s 默认30天, -1代表永不过期 
timeout=2592000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activityTimeout=-1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录) =-1
isConcurrent=true
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token) 
isShare=true
# token风格
isLog=false
### 解析 SA-Token-JWT 生成的 JWT Token 为了解析SA-Token 使用 JSON Web Token (JWT) 方案创建的令牌,通常会涉及到验证签名以及解码载荷两部分工作。由于 SA-Token 支持 JWT 并允许通过配置启用此功能[^1],当应用程序接收到带有 `Authorization` 头部携带 token 的 HTTP 请求时,框架内部已经处理了大部分复杂的逻辑。 然而,在某些情况下可能需要手动解析这个 token,比如在调试过程中或是构建自定义中间件的时候。此时可以利用第三方库如 PyJWT 或者其他语言对应的 JWT 库来进行操作。下面是一个基于 Python 和 PyJWT 库的例子: ```python import jwt secret_key = 'your_secret_key' # 这里替换为你自己的密钥 algorithm = 'HS256' def decode_jwt(token): try: payload = jwt.decode(token, secret_key, algorithms=[algorithm]) return payload except jwt.ExpiredSignatureError: print('Token expired') except jwt.InvalidTokenError: print('Invalid token') # 假设这是从前端传来的Bearer类型的token字符串 bearer_token = "Bearer your.jwt.token.here" auth_token = bearer_token.split(" ")[1] decoded_data = decode_jwt(auth_token) print(decoded_data) ``` 这段代码展示了如何接收来自客户端的一个 Bearer 类型的 token 字符串,并从中提取实际的 JWT 部分用于后续的解析过程。需要注意的是,这里的 `secret_key` 必须与服务端用来签署 token 的密钥相匹配;而算法则取决于当初签发 token 所使用的哈希函数,默认为 HMAC SHA-256 (`HS256`)。 对于 Java 开发者来说,则可以直接借助于 Sa-Token 自身提供的工具类完成相同的工作,无需额外引入依赖项。具体可查阅官方文档获取更多细节[^3]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

没事搞点事做serendipity

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值