判定条件很简单,就是在同一时刻,同一帐号仅在一个终端上可正常操作。
我这里用简单的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;
}
以上基本实现了当前用户顶掉前面登录用户的效果。还是有很多漏洞这种方法,对于简单的实现来说可以将就。