SaToken框架实现在Rpc上下文的login处理逻辑

最近在工作中遇到一个需求,需要在项目A中实现一个rpc接口供其他项目调用,接口返回登录token,从而实现其他项目的用户能免密登录到项目A。
项目A是用了SaToken来做的鉴权,原本我的打算是直接在rpc中调用StpUtil.login()方法来实现登录,并通过Stputil获取到token。但是satoken的login方法内部在生成了token值之后,会自动将token给保存到当前http上下文,也就是Response的cookie中,而在rpc调用中并没有http请求,也不存在http上下文,所以直接调用login方法会抛异常。
在这里插入图片描述
通过对satoken的源码进行分析,我发现了在satoken的登录过程中,存在两个步骤

  1. 生成token,并保存到服务器中
  2. 将生成好的token写入到http上下文

异常就是在第二步的时候抛出的.

在这里插入图片描述
只需要创建一个新类继承StpLogic类,重写上面的函数,去除setTokenValue()逻辑就行。

在这里插入图片描述

然后再使用StpUtil的时候将StpLogic修改为新创建的StpLogin,就能实现在非Http上下文的情况下生成对应token。
然后通过登录Id获取到LoginIdSession,通过LoginIdSession获取到TokenSignList,通过获取SignList列表的0下标对象,从而获取到生成的token值。
在这里插入图片描述
这样就能实现在非Http请求正常调用login方法了,并且在rpc调用需要将StpUtil原本的StpLoginc保存下来,在使用完自定义的MyStpLoginc之后要将StpUtil的StpLoginc给设置回去,避免之后正常的登录请求被影响。

但是这里又会出现问题,因为修改了StpLoginc之后,有可能在Rpc调用过程中,项目A有正常的login请求,此时会使用这个MyStpLoginc,导致token无法正确写入到response中,为了避免这种情况,需要用其他更好的办法.

上面的替换之所以能起作用,都是因为修改了SaToken的鉴权流程.

一.SaManager组件在login方法中的作用

SaManager组件是SaToken框架的核心组件,它在Satoken的Login方法中有两个地方用到了
1. 创建token时,将token缓存到SaManager组件中的SaDao对象中,方便以后登录的时候进行token校验
2. 在将token保存到HttpResponse中时,通过SaManager获取到上下文,再通过上下文获取到response,将token保存到Respose中
在这里插入图片描述
SaManager中有两个上下文分别是一级上下文和二级上下文,在Spring Boot项目中,在处理http请求时,会自动使用SaTokenContextForSpring(Satoken专门为Spring写的上下文类)作为一级上下文,默认情况下二级上下文为空,我们可以自定义一个SaTokenContext当做二级上下文,在非Http请求时获取到上下文,并获取到Response.
在这里插入图片描述

SaTokenContext是一个接口,自定义一个SaTokenContext的实现类时要重写getRequest(),getResponse(),getStorage()方法,

  • getRequest()和getStorage()方法都是返回的模拟HttpRequest对象
  • getResponse()返回是模拟的HttpResponse对象.

自定义好SatokenContext对象后要将这个对象设置为SaManager的二级上下文对象
此时因为默认会使用一级上下文,当存在Http时,会将SaTokenContextForSpring作为一级上下文,这样自定义的二级上下文就不会影响到正常的请求.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/620686.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

速锐得深入解析吉利几何CAN总线数据通信网络的拓扑层级框架技术

在现代汽车工业中,车辆的电子控制单元(ECU)之间的通信至关重要。这种通信大多通过控制器局域网络(CAN)总线实现,它是德国BOSCH公司于20世纪80年代初开发的一种串行数据通信协议。随着技术的不断进步&#x…

【数据结构】之栈的应用——有效的括号

文章目录 有效的括号 有效的括号 原题链接:有效的括号 详解栈的链接 这道题可以利用栈来解决 1.左括号入栈 2.右括号与出栈顶左括号匹配 //创建一个动态的栈 typedef char STDateType; typedef struct Stack {STDateType* a;//储存指定数据类型的数组int top…

Verilog中信号发生器的代码实现

目录 描述 输入描述: 输出描述: 描述 题目描述: 请编写一个信号发生器模块,根据波形选择信号wave_choise发出相应的波形:wave_choice0时,发出方波信号;wave_choice1时,发出锯齿…

栈的实现与OJ括号匹配

今日备忘录: "不破不立. " 本文索引 1. 前言2. 顺序表与链表的区别3. 什么是栈4. 栈的实现5. OJ括号匹配6. 总结 1. 前言 人总是在坍塌中重建, 有些东西必须摧毁, 才能迎来新生, 不管是那些消耗你的人, 还是令你感到焦虑的事情, 还是一份你觉得毫无意义并且又不喜欢…

CSS3私有前缀+新增盒模型相关属性+新增背景属性(如果想知道CSS3私有前缀、新增盒模型相关属性的知识点,那么只看这一篇就足够了!)

前言:CSS3 是CSS2 的升级版本,它在CSS2 的基础上,新增了很多强大的新功能,从而解决一些实际面临的问题。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨想要了解更多内容可以访问我的主页秋刀鱼不做梦-CSDN博客 先让我们看一下本篇文章的…

解聘7名教授!高校取消终身教授制度,启动全员“末位淘汰”

如今,高校是越来越卷了,身处其中的每个人似乎都无法避免。 前一段时间,国内某985高校说是要搞职称降级聘任,另一所985高校说要淘汰多少比例的教师,引发学术圈广泛讨论。 国外呢,同样要卷起来了&#xff0…

[代码比较工具下载及使用]你真的需要一个代码比较工具

💖💖💖欢迎来到我的博客,我是anmory💖💖💖 又和大家见面了 欢迎来到资源分享系列 这里有你想要的各种高质量资源 先来自我推荐一波 个人网站欢迎访问以及捐款 推荐阅读 如何低成本搭建个人网站 …

STM32-LCD液晶屏(ILI9341)

MCU:STM32F103VET6 开发环境:STM32CubeMXMDK5 目录 STM32液晶屏LCD(ILI9341) LCD液晶显示 液晶控制原理 ILI9341液晶控制器简介 8080写时序 8080读时序 FSMC模拟8080时序 液晶屏的信号线 STM32CubeMX配置FSMC 测试部分 …

都是免费的SSL证书,有什么区别

国内做SSL证书的服务商还是比较多,但也不是所有服务商都提供免费的SSL证书,一般只有少数几家提供免费SSL证书。那么,同样都是免费的SSL证书,有哪些不一样的地方呢? 1、验证类型:免费SSL证书通常只提供域名…

网络实验新境界,PNETLab模拟器部署指南

在网络工程领域,拥有一个可靠的网络实验平台至关重要。PNETLab模拟器是一款功能强大的网络仿真工具,它支持包括华为、华三、锐捷、思科在内的多种设备,并且以开源免费的形式提供,这使得它在业界备受青睐。 软件介绍 PNETLab&am…

网络安全防护:抵御DDoS和CC攻击

在当今数字化时代,网络安全已成为任何组织或个人不可忽视的重要议题。DDoS(分布式拒绝服务)攻击和CC(命令与控制)攻击作为两种最为常见的网络攻击方式,给网络运营者和用户带来了巨大的威胁和影响。本文将介…

BGP练习

一,拓扑 二,要求 用BGP连接AS 100,200,300 三,配置 r1: 配置IP: [r1]interface GigabitEthernet 0/0/0 [r1-GigabitEthernet0/0/0]ip address 12.0.0.1 24 [r1]interface LoopBack 0 [r1-LoopBack0]ip address 1.1.1.1 32 [r1]interfac…

爱普生推出适用于物联网小尺寸温补晶振TG1612SLN

爱普生推出一款小尺寸温补晶振TG1612SLN,之前推出的小尺寸温补晶振TG2016SLN,封装2016已经是很小了,而TG1612SLN的尺寸仅为1.6x1.2x0.45毫米,不得不佩服爱普生的研发能力。 温度补偿晶体振荡器TG1612SLN使用爱普生开发和制造…

FebHost:注册新西兰.NZ域名考虑哪些因素?

在考虑注册.nz域名时,需要考虑新西兰的经济规模、电子商务的普及程度和互联网用户数量。以下是一些关键因素: 市场潜力 虽然与大国相比,新西兰的经济规模可能较小,但它仍然为商业提供了机会,特别是那些针对本地市场的…

消费新纪元:探索消费增值的财富之旅

你是否曾对日常消费感到一丝无奈,觉得钱一旦花出去就如同流水般逝去,再也无法追回?现在,让我为你揭示一种革命性的消费观念——消费增值,它不仅能满足你的物质需求,还能让你的资金像滚雪球般持续增长&#…

一键自动化博客发布工具,用过的人都说好(csdn篇)

CSDN应该是大家接触到最多的博客平台了,所以一款能够发布到CSDN的自动化工具还是非常有必要的。 今天给大家讲讲自动化CSDN博客发布的思路和一些问题的解决办法。 解决问题的思路一定是最重要的,知识是死的,问题是活的,如何在工作…

【学习笔记】人群归因分数 PAF 以及combined PAF(更新)

在此推荐2篇发表在lancet以及jama子刊上的paf文章,这两篇文章套路是一样的,只是在不同国家进行。 在计算combined PAF或者说weighted PAF的时候,先建立了相关矩阵,再做主成分分析,得到communality。详细信息大家可翻阅…

法国签证照片尺寸怎么调整?图片调整尺寸的方法介绍

在我们的平时生活中,个人证件照是我们必不可少的身份证明,它是一种具有严格尺寸和比例要求的特殊照片,对于一些特定的场合,比如我们在申请法国签证的时候,需要把照片调整到规定的大小尺寸,那么,…

RK3568外置RTC芯片PCF8563T(或替代型号)实验

RK3568 外接 PCF8563 RTC Chapter0 RK3568 外接 PCF8563 RTC1 menuconfig中打开pcf8563驱动2 设备树DTS3 修改驱动 Chapter1 【正点原子Linux连载】第三十一章 外置RTC芯片AT8563T实验 摘自【正点原子】ATK-DLRK3568嵌入式Linux驱动开发指南第三十一章 外置RTC芯片AT8563T实验3…

GBase 8s 数据库集群切换及恢复

GBase 8s 数据库切换分为自动切换、由CM控制的按FOC规则的切换、手工切换。 自动切换 全自动切换用于HAC集群中,由于集群只有两个节点,数据库相互之前进行状态检查,发现异常时,能按DRAUTO的配置方式进行自动切换。 在HAC集群中&…