判定條件很簡單,就是在同一時刻,同一帳號僅在一個終端上可正常操作。
我這里用簡單的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;
}
以上基本實現了當前用戶頂掉前面登錄用戶的效果。還是有很多漏洞這種方法,對於簡單的實現來說可以將就。