java做單用戶的多重並發會話數限制


判定條件很簡單,就是在同一時刻,同一帳號僅在一個終端上可正常操作。

我這里用簡單的key,value進行判定,將用戶存儲在map里面,新登錄用戶登陸進系統后,判斷map里是否存在當前用戶,若存在就刪除,將新登錄用戶的session信息存入map里,這樣前面登錄用戶就會退出系統。

繼承HttpSessionListener,HttpSessionAttributeListener類

1、先需要配置項目下的web.xml

  <listener>

    <listener-class>com.baidu.controller.SessionListener</listener-class>
  </listener>

2、代碼貼上

public static Map<String, HttpSession> sessionMap = new HashMap<String, HttpSession>();

private HttpServletRequest request;

public void attributeAdded(HttpSessionBindingEvent event) {
        String name = event.getName();
        if("user".equals(name)){
            User user = (User) event.getValue();
            if (sessionMap.get(user.getUsername()) != null) {  
                HttpSession session = sessionMap.get(user.getUsername());  
                session.removeAttribute(user.getUsername());  
                session.invalidate();  
            }
            sessionMap.put(user.getUsername(), event.getSession());
        }    
}

public void attributeRemoved(HttpSessionBindingEvent event) {
        String name = event.getName(); 
        if (name.equals("user")) {  
            User user = (User) event.getValue();  
            sessionMap.remove(user.getUsername()); 
        }            // TODO Auto-generated method stub   
}

public static Map<String, HttpSession> getSessionMap() {
        return sessionMap;
}
public static void setSessionMap(Map<String, HttpSession> sessionMap) {
  SessionListener.sessionMap = sessionMap;
}

以上基本實現了當前用戶頂掉前面登錄用戶的效果。還是有很多漏洞這種方法,對於簡單的實現來說可以將就。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM