67,513
社区成员
发帖
与我相关
我的任务
分享
public class UserTracker
implements HttpSessionBindingListener, Serializable {
private static UserTracker instance = null;
// userID列表
public List trackerList = new ArrayList();
private UserTracker() {
super();
}
public static UserTracker getInstance() {
if (instance == null) {
instance = new UserTracker();
}
return instance;
}
/**
* 登录的时候记录
* @param event HttpSessionBindingEvent
*/
public void valueBound(HttpSessionBindingEvent event) {
UserTrackerInfo newTracker = new UserTrackerInfo();
newTracker.setUserCode((Integer)event.getSession().getAttribute("USERCODE"));
newTracker.setSessionID(event.getSession().getId());
//如果前面已经有登陆,则删除登陆的信息(踢人)
//removeUserIfExist(newTracker.getUserCode());
//增加自己
operateTracker(newTracker, "add");
}
/**
* 超时的时候退出
* @param event HttpSessionBindingEvent
*/
public void valueUnbound(HttpSessionBindingEvent event) {
UserTrackerInfo oldTracker;
String sessionID = event.getSession().getId();
Iterator it = trackerList.iterator();
while (it.hasNext()) {
oldTracker = (UserTrackerInfo) it.next();
if (oldTracker.getSessionID().equals(sessionID)) {
operateTracker(oldTracker, "remove");
return;
}
}
}
/**
*添加删除用户登录信息,operateType值"add","remove"
* @param event HttpSessionBindingEvent
*/
public void operateTracker(UserTrackerInfo tracker, String operaterType) {
if (operaterType.equals("add")) {
trackerList.add(tracker);
}
if (operaterType.equals("remove")) {
trackerList.remove(tracker);
}
}
/**
* 判断用户是否在登录页表中,如果不在,返回false
* @param sessionID String
* @return boolean
*/
public boolean existInLoginList(String sessionID) {
UserTrackerInfo oldTracker;
Iterator it = trackerList.iterator();
while (it.hasNext()) {
oldTracker = (UserTrackerInfo) it.next();
System.out.println("新sessionid=================== "+sessionID);
System.out.println("旧sessionid=================== "+oldTracker.getSessionID());
if (oldTracker.getSessionID().equals(sessionID)) {
return true;
}
}
return false;
}
}
boolean isSessionValid = UserTracker.existInLoginList(req.getRequestedSessionId());