在 Spring 引导中验证同一用户时 JSESSIONID 或 X-AUTH-TOKEN 重复

JSESSIONID or X-AUTH-TOKEN duplicates while authenticating the same user in Spring boot

我的团队一直在使用 springboot + redis 来保护微服务,方法是将 spring-安全会话存储在 Redis 实例中,允许每个会话一个会话user(表示一个用户一次只能登录一次,如果用户同时登录两次,前一次的session将失效)。大多数时候一切都很完美,但总是如此。

有时会注意到,如果用户在 1 分钟内登录两次而没有注销前一个会话,jsessionid - 或 X-auth-token 是重复的,这意味着第二个会话 ID 与前一个会话 ID 相同,这很奇怪,理想情况下它应该使旧会话无效并创建一个新会话,而且这种情况并不总是发生,只是在某些情况下。

另请注意,有 3 个微服务实例 运行 并行并指向同一个 Redis 服务器。

有人知道如何解决这个问题吗?

您可以先删除您的 JWT 令牌 class 中的现有登录,然后像这样向 redis 添加另一个令牌:

TokenRedisDto dto = (TokenRedisDto) myRedisService.loadById(users.getUsername());
 if (Objects.nonNull(dto)){
     // remove previous logged-in user
     myRedisService.deleteItem(dto.getId());
 }
// add another token here..
myRedisService.addItem(new TokenRedisDto(users.getUsername(), token));

我在企业和个人的负载测试和操作中测试了太多次。在微服务中正常工作!