同平臺不允許同時登陸的方案(不同平臺可同時登陸)
阿新 • • 發佈:2020-08-26
專案需求:
現在專案有PC端,WEB端,APP端
同端不允許同時登陸,不同端可以同時登陸
並沒有涉及太多複雜的邏輯,這裡只探討結合Redis進行不同端的登陸控制.
具體方案:
1 - 將token存到redis中
2 - token: 型別-使用者id-隨機數
3 - 使用者登入時根據型別和id刪除原token,寫入新token
4 - 使用者退出時根據型別和id刪除原token
上程式碼:
1 - 登陸
public String login(String phone, String password, String type) { User user = getUserByPhone(phone);if (user == null) { return "NOT_FOUND"; } if (!checkPassword(user.getPassword(), password)) { return "PASSWORD_ERROR"; }// 刪除redis中原token deleteToken(user, type); // 生成新token,存redis,返回 return setToken2Redis(user, type); }
2 - 刪除原token
public void deleteToken(User user, String type) { String deleteRegex= type + "-" + user.getId() + "*"; Set<String> keys = redisTemplate.keys(deleteRegex); redisTemplate.delete(keys); }
3 - 生成新token
public String setToken2Redis(User user, String type) { String token = createToken(user, type); // 登陸時其它資訊快取... return token; }
儘可能的簡單,只要滿足現在的使用就可以.
因為需求在變,越簡單越容易重構.