session監聽,同一用戶登錄後,其他系統中不讓此用戶再次登錄

最近在做一個系統,客戶報出bug,用戶在某系統登錄後,在其他機子上也能再次登錄,還能登錄;解決此bug,用了網上常用的一段代碼:

聲明:下文代碼網上比較常見,屬於引用

public class OnLineUserListener implements HttpSessionListener {

    private static HashMap hUserName = new HashMap();// 保存sessionID和username的映射

    public void sessionCreated(HttpSessionEvent se) {
        // TODO Auto-generated method stub
    }

    public void sessionDestroyed(HttpSessionEvent se) {
        // TODO Auto-generated method stub
        hUserName.remove(se.getSession().getId());
    }

    public static boolean isAlreadyEnter(HttpSession session, String sUserName) {
        boolean flag = false;
        if (hUserName.containsValue(sUserName)) {// 如果該用戶已經登錄過,則使上次登錄的用戶掉線(依據使用戶名是否在hUserName中)
            flag = true;
            // 遍歷原來的hUserName,刪除原用戶名對應的sessionID(即刪除原來的sessionID和username)
            Iterator iter = hUserName.entrySet().iterator();
            while (iter.hasNext()) {
                Map.Entry entry = (Map.Entry) iter.next();
                Object key = entry.getKey();
                Object val = entry.getValue();
                if (((String) val).equals(sUserName)) {
                    hUserName.remove(key);
                }
            }
            hUserName.put(session.getId(), sUserName);// 添加現在的sessionID和username
            System.out.println("hUserName = " + hUserName);
        } else {// 如果該用戶沒登錄過,直接添加現在的sessionID和username
            flag = false;
            hUserName.put(session.getId(), sUserName);
            System.out.println("hUserName = " + hUserName);
        }
        return flag;
    }

    /*
     * isOnline-用於判斷用戶是否在線
     *
     * @param session HttpSession-登錄的用戶名稱
     *
     * @return boolean-該用戶是否在線的標誌
     */
    public static boolean isOnline(HttpSession session) {
        boolean flag = true;
        if (hUserName.containsKey(session.getId())) {
            flag = true;
        } else {
            flag = false;
        }
        return flag;
    }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章