Session监听在线统计人数,简单的单点登录

来源:互联网 发布:淘宝店铺严重违规48分 编辑:程序博客网 时间:2024/05/29 08:52
import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.servlet.ServletContext;import javax.servlet.http.HttpSession;import javax.servlet.http.HttpSessionEvent;import javax.servlet.http.HttpSessionListener;public class OaSessionListener implements HttpSessionListener {//保存sessionId和UserName的映射private static HashMap hUserName=new HashMap();@Overridepublic void sessionCreated(HttpSessionEvent arg0) {HttpSession session = arg0.getSession();ServletContext application = session.getServletContext();//把用户名放入在线列表,在application范围有一个List集保存所有的SessionList onlineUserList = (List) application.getAttribute("onlineUserList");// 第一次使用前,需要初始化if (onlineUserList == null) {onlineUserList = new ArrayList();application.setAttribute("onlineUserList", onlineUserList);}// 新创建的session均添加到List集中onlineUserList.add(onlineUserList);System.out.println("当前在线人数:" + onlineUserList.size() + "人");}@Overridepublic void sessionDestroyed(HttpSessionEvent arg0) {HttpSession session = arg0.getSession();ServletContext application = session.getServletContext();List onlineUserList = (List) application.getAttribute("onlineUserList"); //销毁的session均从List中移除onlineUserList.remove(onlineUserList);System.out.println("用户退出或登录超时之后用户在线人数:" + onlineUserList.size() + "人");}/** * TODO用于判断用户是否已经登录以及相应的处理方法 * @author Palm * @date 2016年7月27日 * @param session用户登录时的session * @param sUserName登录的用户名称 * @return */public static boolean isAlreadyEnter(HttpSession session,String sUserName){boolean flag=false;//如果该用户已经登录过,则使上次登陆的用户掉线if(hUserName.containsValue(sUserName)){flag=true;//遍历原来的hUserName,删除原用户名对应的SessionID(即删除原来的sessionID和userName)Iterator iter=hUserName.entrySet().iterator();while(iter.hasNext()){Map.Entry entry=(Map.Entry)iter.next();Object key = entry.getKey();Object value = entry.getValue();if(value.equals(sUserName)){System.out.println("hUserName = "+value);hUserName.remove(key);}}//添加现在的SessionID和userNamehUserName.put(session.getId(), sUserName);System.out.println("hUserName = "+hUserName);}else{//如果用户没有登录过,直接添加到现在的SessionID和userNameflag=false;hUserName.put(session.getId(), sUserName);System.out.println("hUserName ="+hUserName);}return flag;}     /**      * isOnline-用于判断用户是否在线      *       * @param session      *            HttpSession-登录的用户名称      * @return boolean-该用户是否在线的标志      */      public static boolean isOnline(HttpSession session) {          boolean flag = true;          if (hUserName.containsKey(session.getId())) {              flag = true;          } else {              flag = false;          }          return flag;      }  }

0 0
原创粉丝点击