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

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

授权服务:


    cn.dev33
    sa-token-spring-boot-starter
    1.34.0


    cn.dev33
    sa-token-dao-redis-jackson
    1.34.0


    org.apache.commons
    commons-pool2

网关服务:

    
        cn.dev33
        sa-token-reactor-spring-boot-starter
        1.34.0
    
    
        cn.dev33
        sa-token-dao-redis-jackson
        1.34.0
    
    
        org.apache.commons
        commons-pool2
    

你可能感兴趣的:(微服务,java,架构,gateway)