背景
我的项目的登录接口在登录时会去获取用户的菜单,但是我在获取菜单的方法里逻辑写错了(登录接口不是我负责的,我写的是菜单),
我使用UserUtils.getCurrentTenantId()去获取用户的信息(它会从session里获取用户信息),这是很明显的错误,因为我现在都没登录怎么获取登录后的信息呢?
但是我在本地运行时候,一点问题也没有,导致我也没有发现这个问题,但是当后端部署到服务器上测试环境后就报错了。
解决
虽然这个问题很简单,一下子就改了,但是我就是很好奇,为什么我本地一点问题也没有呢?哪怕是我重启了后台服务,它还是能获取到session,
我问了ai,它告诉我sa-token是默认存在内存的。。。我也信了,因为我看了我们项目的Sa-token配置,并没有去配置redis
我们项目的配置
# sa-token 配置
# token 名称 (同时也是 cookie 名称)
sa-token.token-name = Authorization
# token 有效期(单位:秒) 默认30天,-1 代表永久有效
sa-token.timeout = 2592000
# token 最低活跃频率(单位:秒),如果 token 超过此时间没有访问系统就会被冻结,默认-1 代表不限制,永不冻结
sa-token.active-timeout = -1
# 是否允许同一账号多地同时登录 (为 true 时允许一起登录, 为 false 时新登录挤掉旧登录)
sa-token.is-concurrent = true
# 在多人登录同一账号时,是否共用一个 token (为 true 时所有登录共用一个 token, 为 false 时每次登录新建一个 token)
sa-token.is-share = false
# token 风格(默认可取值:uuid、simple-uuid、random-32、random-64、random-128、tik)
sa-token.token-style = uuid
# 是否输出操作日志
sa-token.is-log = true
# 同一账号登录数量登录限制 默认值12,-1代表不做限制
sa-token.max-login-count = 48
但是我去看了sa-token官网,只需要引入依赖,不需要配置,它就会使用redis来持久化,我们项目也是这样做的
<!-- sa-token--><dependency><groupId>cn.dev33</groupId><artifactId>sa-token-spring-boot3-starter</artifactId></dependency><!-- Sa-Token 整合 Redis (使用 jackson 序列化方式) --><dependency><groupId>cn.dev33</groupId><artifactId>sa-token-redis-jackson</artifactId></dependency>