package com.fgkj.Listeners;
|
|
import com.fgkj.util.*;
|
import com.fgkj.dto.UserClient;
|
import com.fgkj.dto.User_inf;
|
|
import javax.servlet.http.*;
|
import java.util.Hashtable;
|
import java.util.Map;
|
|
/**
|
* @Description :
|
* @date 2020/09/11
|
**/
|
public class LoginSessionListener implements HttpSessionListener, HttpSessionAttributeListener {
|
|
private static Map<String, HttpSession> onlineUsers = new Hashtable<String, HttpSession>();
|
|
private static final String SESSION_BEAN = "user";
|
|
/**
|
* Session添加了一个属性时触发: 当添加了user属性到Session中(登录时才有)触发
|
*
|
* */
|
@Override
|
public void attributeAdded(HttpSessionBindingEvent event) {
|
//获取Session属性的key
|
String attrName = event.getName();
|
System.out.println("Session中添加了属性"+attrName);
|
if("user".equals(attrName)){
|
HttpSession session = event.getSession();
|
User_inf user = (User_inf) session.getAttribute("user");
|
//查看线上用户是否包含当前用户
|
if(onlineUsers.containsKey(user.getuName())){ //包含
|
Map<String, UserClient> userMap = (Map) ActionUtil.getApplication().getAttribute("users");
|
// if(userMap.containsKey(user.getuName())){ //包含
|
//清除用户之前的Session
|
HttpSession oldSession = onlineUsers.get(user.getuName());
|
oldSession.invalidate();
|
}
|
onlineUsers.put(user.getuName(),session);
|
}
|
}
|
|
|
|
/**Session移除了一个属性时触发*/
|
@Override
|
public void attributeRemoved(HttpSessionBindingEvent event) {
|
|
}
|
|
/**Session移除了一个属性时触发*/
|
@Override
|
public void attributeReplaced(HttpSessionBindingEvent event) {
|
|
}
|
|
/**Session创建时调用*/
|
@Override
|
public void sessionCreated(HttpSessionEvent se) {
|
|
}
|
|
/**Session调用invalidate方法时触发*/
|
@Override
|
public void sessionDestroyed(HttpSessionEvent se) {
|
//如果退出登录,从map中移除
|
HttpSession session = se.getSession();
|
onlineUsers.remove(((User_inf)session.getAttribute("user")).getuName());
|
System.out.println("Session调用invalidate方法时触发-"+((User_inf)session.getAttribute("user")).getuName());
|
}
|
}
|