首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Spring + MyBatis 實現單點登錄:同一賬號僅允許一處在線

     編輯:程式設計疑難解答

需求:用戶第二次登錄時,踢掉第一次登錄的 Session。

推薦方案:Redis + Token 版本號(無需建表)

  1. 登錄成功生成 token,存入 Redis:user:{id}:token = {token}:{version}
  2. 每次請求攜帶 token,攔截器校驗版本號一致性
  3. 新登錄時 version++,舊 token 自動失效

核心代碼片段

// 登錄
String newToken = UUID.randomUUID().toString();
redisTemplate.opsForValue().set("user:" + userId + ":token", newToken + ":" + newVersion);

// 攔截器
String stored = redisTemplate.opsForValue().get("user:" + userId + ":token");
if (stored == null || !stored.endsWith(":" + currentVersion)) {
    throw new SessionExpiredException();
}

優勢

  • 無需數據庫表、定時清理任務
  • 集群環境天然共享,無單點故障
  • 支持多端(Web/App/小程序)統一踢線策略

參考:CSDN 完整實現

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved