⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onlinecounterlistener.java

📁 wmoa办公自动化系统 小型的JAVA项目 功能包括审批流 消息发布等
💻 JAVA
字号:
package com.dudu.moa.commons;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * 通过监听session(包括attribute)设置和获取在线用户列表
 * 
 * @author <a href="malito:denglq@wanwei.com.cn">邓利强</a>
 */
public class OnlineCounterListener implements HttpSessionAttributeListener, HttpSessionListener {

	public void attributeAdded(HttpSessionBindingEvent event) {
		// 当session属性中添加key为"___session_user_key"的时候,表示用户登录
		// if (StringUtils.isNotBlank(event.getName()) &&
		// Constants.SESSION_USER_KEY.equalsIgnoreCase(event.getName())) {
		// SysUser sysUser = (SysUser)event.getSession().getAttribute(Constants.SESSION_USER_KEY);
		// if (sysUser != null) {
		// String orgId = sysUser.getOrgId();
		// String userId = sysUser.getUserId();
		// if (StringUtils.isBlank(userId)) log.warn("用户编号为空");
		// if (StringUtils.isBlank(orgId)) log.warn("单位编号为空");
		// SysOrg sysOrg = null;
		// try {
		// sysOrg = getSysOrg(sysUser.getOrgId());
		// } catch (Exception e) {
		// e.printStackTrace();
		// }
		// if (userMap.containsKey(userId)) {
		// String oldSessionId = (String)((SysUser)userMap.get(userId)).getProperty("sessionId");
		// if (!event.getSession().getId().equalsIgnoreCase(oldSessionId)) {
		// log.info("【" + sysOrg.getOrgName() + "】的<" + sysUser.getUserName() + ">】重复登录");
		// sessionMap.put(oldSessionId, Constants.LOGIN_OTHER_LOGED);
		// sysUser.addProperty("sessionId", event.getSession().getId());
		// userMap.put(userId, sysUser);
		// sessionMap.put(event.getSession().getId(), Constants.LOGIN_NORMAL);
		// }
		// } else {
		// if (orgMap.containsKey(orgId)) {
		// Integer count = (Integer)orgMap.get(orgId);
		// count++;
		// orgMap.put(orgId, count);
		// } else {
		// orgMap.put(orgId, 1);
		// }
		// log.info("【" + sysOrg.getOrgName() + "】的<" + sysUser.getUserName() + ">登录系统");
		// sysUser.addProperty("sessionId", event.getSession().getId());
		// userMap.put(userId, sysUser);
		// sessionMap.put(event.getSession().getId(), Constants.LOGIN_NORMAL);
		// }
		// log.info("【" + sysOrg.getOrgName() + "】的在线用户数为:" + orgMap.get(orgId));
		// }
		// }
		//		
		// //当session属性中添加key为"__session_logout"时,表示用户离线
		// if (StringUtils.isNotBlank(event.getName()) &&
		// Constants.SESSION_LOGOUT.equalsIgnoreCase(event.getName())) {
		// SysUser sysUser = (SysUser)event.getSession().getAttribute(Constants.SESSION_USER_KEY);
		// if (sysUser != null) {
		// String orgId = sysUser.getOrgId();
		// String userId = sysUser.getUserId();
		// if (StringUtils.isBlank(userId)) log.warn("用户编号为空");
		// if (StringUtils.isBlank(orgId)) log.warn("单位编号为空");
		// SysOrg sysOrg = null;
		// try {
		// sysOrg = getSysOrg(sysUser.getOrgId());
		// } catch (Exception e) {
		// e.printStackTrace();
		// }
		// deleteDocByUserId(userId);// 删除正文加锁标志
		//				
		// if (userMap.containsKey(userId)) {
		// userMap.remove(userId);
		//					
		// if (orgMap.containsKey(orgId)) {
		// Integer count = (Integer)orgMap.get(orgId);
		// count--;
		// orgMap.put(orgId, count);
		// }
		// }
		//				
		// event.getSession().invalidate();
		// log.info("【" + sysOrg.getOrgName() + "】的<" + sysUser.getUserName() + ">自行下线");
		// log.info("【" + sysOrg.getOrgName() + "】的在线用户数为:" + orgMap.get(orgId));
		// }
		// }
		//		
		// //文档加锁
		// if (StringUtils.isNotBlank(event.getName()) && event.getName().indexOf("docLocked_") >=
		// 0) {
		// String docId = event.getName();
		// SysUser sysUser = (SysUser)(event.getSession().getAttribute(docId));
		// String userName = sysUser.getUserName();
		// if(existDoc(docId)){
		// log.debug("公文已被"+userName+"加锁!");
		// }else{
		// docLockedMap.put(docId, sysUser);
		// }
		// }
	}

	public void attributeReplaced(HttpSessionBindingEvent event) {
		// 用户重新登录
		// if (StringUtils.isNotBlank(event.getName()) &&
		// Constants.SESSION_USER_KEY.equalsIgnoreCase(event.getName())) {
		// SysUser sysUser = (SysUser)event.getSession().getAttribute(Constants.SESSION_USER_KEY);
		// SysOrg sysOrg = null;
		// try {
		// sysOrg = getSysOrg(sysUser.getOrgId());
		// } catch (Exception e) {
		// e.printStackTrace();
		// }
		// log.info("【" + sysOrg.getOrgName() + "】的<" + sysUser.getUserName() + ">再次登录系统");
		// log.info("【" + sysOrg.getOrgName() + "】的在线用户数为:" + orgMap.get(sysUser.getOrgId()));
		// }
		//		
		// //用户重复离线
		// if (StringUtils.isNotBlank(event.getName()) &&
		// Constants.SESSION_LOGOUT.equalsIgnoreCase(event.getName())) {
		// event.getSession().removeAttribute(Constants.SESSION_LOGOUT);
		// }
	}

	public void sessionCreated(HttpSessionEvent event) {
		log.debug("session 被创建,id:" + event.getSession().getId());
	}

	public void sessionDestroyed(HttpSessionEvent event) {
		// SysUser sysUser = (SysUser) event.getSession().getAttribute(Constants.SESSION_USER_KEY);
		// if (sysUser != null) {
		// SysOrg sysOrg = null;
		// try {
		// sysOrg = getSysOrg(sysUser.getOrgId());
		// } catch (Exception e) {
		// e.printStackTrace();
		// }
		// deleteDocByUserId(sysUser.getUserId());// 删除正文加锁标志
		// if (userMap.containsKey(sysUser.getUserId())) {
		// //得到当前被注销session中的用户实体中保存的sessionId
		// String destoryedSessionId = (String)sysUser.getProperty("sessionId");
		// //得到在线用户Map里的用户实体中保存的sessionId
		// String currentSessionId =
		// (String)((SysUser)userMap.get(sysUser.getUserId())).getProperty("sessionId");
		// if (StringUtils.isNotBlank(destoryedSessionId) &&
		// StringUtils.isNotBlank(currentSessionId)) {//保证两个sessionId都不为空
		// //如果登录用户的sessionId等于注销session的用户sessionId
		// //则从在线用户Map中清除该用户,并且而在线人数减1
		// if (currentSessionId.equals(destoryedSessionId)) {
		// userMap.remove(sysUser.getUserId());
		// boolean test = false;
		// if (orgMap.containsKey(sysUser.getOrgId())) {
		// Integer count = (Integer)orgMap.get(sysUser.getOrgId());
		// if (count != null) {
		// test = true;
		// int _count = count.intValue();
		// _count--;
		// orgMap.put(sysUser.getOrgId(), _count);
		// }
		// }
		// if (!test) log.error("在线统计人数有bug!!!!!!!!!!!!!");
		// }
		// }
		// }
		//			
		// log.info("【" + sysOrg.getOrgName() + "】的<" + sysUser.getUserName() + ">在" +
		// event.getSession().getAttribute(Constants.SESSION_LOGIN_IP) + "登录的状态被清空");
		// log.info("【" + sysOrg.getOrgName() + "】的在线用户数为:" + orgMap.get(sysUser.getOrgId()));
		// }
	}

	/**
	 * 根据单位id获取在线人数
	 * 
	 * @param currentEnterId
	 * @return
	 */
	public static int getCount(String orgId) {
		if (orgMap.containsKey(orgId)) {
			Integer n = (Integer) orgMap.get(orgId);
			return n.intValue();
		} else {
			return 0;
		}
	}

	public static List getUserList(String orgId) {
		List result = new ArrayList();
		// SysUser sysUser = null;
		// String userId = null;
		// for (Iterator it = userMap.keySet().iterator(); it.hasNext();) {
		// userId = (String)it.next();
		// if (userId != null) {
		// sysUser = (SysUser)userMap.get(userId);
		// if (sysUser != null) {
		// if (orgId.equals(sysUser.getOrgId())) {
		// result.add(sysUser);
		// }
		// }
		// }
		// }
		return result;
	}

	public void attributeRemoved(HttpSessionBindingEvent arg0) {

	}

	private transient final Log log = LogFactory.getLog(getClass());

	/**
	 * 已登录用户
	 */
	private static Map userMap = new LinkedHashMap();

	public static Map getUserMap() {
		return userMap;
	}

	/**
	 * 当前登录用户所属单位,key=orgId,value=在线人数(int)
	 */
	private static Map orgMap = new LinkedHashMap();

	public static Map getOrgMap() {
		return orgMap;
	}

	private static Map sessionMap = new LinkedHashMap();

	public static Map getSessionMap() {
		return sessionMap;
	}

	private static Map docLockedMap = new HashMap();// key - "docLocked_"+docId value+"#"+userId
													// value - sysUser - 记录文档加锁情况
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -