天天看點

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;

    }

    public static boolean isOnline(HttpSession session) {

        boolean flag = true;

        if (hUserName.containsKey(session.getId())) {

            flag = true;

        } else {

            flag = false;

        }

        return flag;

    }

}

繼續閱讀