原理:java
發登陸監聽類,在監聽類當中判斷出帳號a已經被用戶A登陸,就把用戶A的帳號a 踢出去,此時當用戶A操做頁面,頁面就會跳轉到web
登陸頁面。spring
代碼實現:瀏覽器
咱們判斷存放帳號和session對應關係的map中是否有當前登陸的帳號的session,若是有咱們就把該session從map中移除,同時注session
銷該session,而後把剛登陸的帳號和session放入map。mybatis
代碼:package com.jk.util;this
import java.util.HashMap;spa
import java.util.Map;.net
import javax.servlet.http.HttpServletRequest;code
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import com.jk.entity.CodePw;
import com.sun.xml.bind.v2.runtime.Location;
/**
*
* <pre>項目名稱:spring-mybatis
* 類名稱:LoginListenner
* 類描述: 登陸監聽類-處理同一時間只容許帳號,單地點登陸
* 建立人:
* 建立時間:2016年10月29日 上午10:44:50
* 修改人:
* 修改時間:2016年10月29日 上午10:44:50
* 修改備註:
* @version </pre>
*/
public class LoginListenner implements HttpSessionAttributeListener {
/**
* 用於存放帳號和session對應關係的map
*/
private Map<String, HttpSession> map = new HashMap<String, HttpSession>();
/**
* 當向session中放入數據觸發
*/
public void attributeAdded(HttpSessionBindingEvent event) {
String name = event.getName();
System.err.println(name);
if (name.equals("adminUser")) {
CodePw user = (CodePw) event.getValue();
if (map.get(user.getUsercode()) != null) {
HttpSession session = map.get(user.getUsercode());
session.removeAttribute(user.getUsercode());
session.invalidate(); // 使得 session 失效
}
map.put(user.getUsercode(), event.getSession());
}
}
/**
* 當向session中移除數據觸發
*/
public void attributeRemoved(HttpSessionBindingEvent event) {
String name = event.getName();
if (name.equals("adminUser")) {
CodePw user = (CodePw) event.getValue();
map.remove(user.getUsercode());
}
}
public void attributeReplaced(HttpSessionBindingEvent event) {
}
public Map<String, HttpSession> getMap() {
return map;
}
public void setMap(Map<String, HttpSession> map) {
this.map = map;
}
}
登陸方法
web.xml
<!--一個用戶只能在一個主機登陸 -->
<listener>
<listener-class>com.test.util.LoginListenner</listener-class>
</listener>
<!-- 一個用戶只能在一個主機登陸 end-->