微服务环境下sa-token session同步

在微服务架构中,网关和授权服务分别集成sa-token进行token验证和登录操作。遇到的问题是,网关能获取token但无法得到登录ID,因为缺少分布式session的同步。解决方案是通过引入sa-token的Redis依赖,在两个服务中实现session同步,以处理WebFlux框架下的网关和SpringBoot框架的授权服务之间的交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景:
微服务结构下,在网关和授权服务分别接入sa-token,网关的作用是拦截请求验证token,授权服务的作用是进行登录相关操作。
问题:
在授权服务中完成登录后,后续请求携带token来到网关处进行验证,在网关处使用StpUtil.getTokenValue()方法能正常获取token值进行验证,但是无法使用StpUtil.getLoginId()获取对应的登录id,会报无法获取有效的上下文错误,并且后续想要在网关进行权限验证,就必须获得当前请求会话中登录的id去数据库查询对应的角色权限。
解决方法:
微服务是分布式的实现,网关和授权服务分别是两个独立的服务,查看官方文档,我们应该实现分布式session的同步,引入官方的redis依赖,并且两个服务都需要引入,自此sa-token框架会帮我们在redis中同步session,不需要你做更多的操作,这里注意的是网关gateway采用的webflux框架,不同于授权服务的springboot框架,引入的sa-token依赖是不同的,官网也指出了这一点。

授权服务:

<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-spring-boot-starter</artifactId>
    <version>1.34.0</version>
</dependency>
<dependency>
    <groupId>cn.dev33</groupId>
    <artifactId>sa-token-dao-redis-jackson</artifactId>
    <version>1.34.0</version>
</dependency>
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-pool2</artifactId>
</dependency>

网关服务:

    <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-reactor-spring-boot-starter</artifactId>
        <version>1.34.0</version>
    </dependency>
    <dependency>
        <groupId>cn.dev33</groupId>
        <artifactId>sa-token-dao-redis-jackson</artifactId>
        <version>1.34.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-pool2</artifactId>
    </dependency>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值