記一次同一賬號一端登入,自動擠出另一個端

e_shi_yi_p_l發表於2020-10-17

背景:最近來了一需求。同一賬號在一個端登入,需自動擠出另一個端

思考:
1、針對單機版服務,都是通過客戶端傳 Cookie: JSESSIONID=F870E571C55BAFBE7050C98B9B1D6FFE; 服務端儲存session控制各個瀏覽器的會話。
2、同一賬號登入,需把此賬號另一端的session銷燬即可。

針對1和2 分析涉及到1個問題,第二次登入拿到第一次登入的session銷燬即可。

因此需要對session統一管理,方便操作。

public class SessionUtil {
    private static ConcurrentHashMap<String, HttpSession> hashMap = new ConcurrentHashMap<String, HttpSession>();

    public static void putSessionId(HttpSession session) {
        hashMap.put(session.getId(), session);
    }
    public static HttpSession getSession(String sessionId) {
        return hashMap.get(sessionId);
    }
    public static void removeSessionId(HttpSession session) {
        hashMap.remove(session.getId());
    }
}

使用全域性變數統一管理,涉及到多個使用者執行緒操作。使用併發包 ConcurrentHashMap

使用redis 記錄 sessionId 即可。。

找出session銷燬即可 httpSession.invalidate();

相關文章