现在的位置: 首页 > 综合 > 正文

OnlineListener

2014年03月12日 ⁄ 综合 ⁄ 共 6429字 ⁄ 字号 评论关闭
**
 * 监听在线用户上线下线  
 */
public class OnlineListener implements ServletContextListener, ServletContextAttributeListener, HttpSessionListener, HttpSessionAttributeListener, HttpSessionActivationListener, HttpSessionBindingListener, ServletRequestListener, ServletRequestAttributeListener {

	private static ApplicationContext ctx = null;
	private static HttpServletRequest req = null;

	public OnlineListener() {
	}

	public void requestDestroyed(ServletRequestEvent arg0) {
	}

	/**
	 * 向session里增加 user_session属性时调用
	 */
	@Override
	public void attributeAdded(HttpSessionBindingEvent evt) {
		String name = evt.getName();
		if (Globals.USER_SESSION.equals(name)) {// 如果存入的属性是user_session
			HttpSession session = evt.getSession();
			SessionInfo sessionInfo = (SessionInfo) session.getAttribute(name);
			if (sessionInfo != null) {
				SystemService systemService = (SystemService) ctx.getBean("systemService");
				systemService.addOnline(IpUtil.getIpAddr(req), sessionInfo.getUser());
			}
		}
	}

	/**
	 * 服务器初始化
	 */
	public void contextInitialized(ServletContextEvent evt) {
		ctx = WebApplicationContextUtils.getWebApplicationContext(evt.getServletContext());
	}

	public void sessionDidActivate(HttpSessionEvent arg0) {
	}

	public void valueBound(HttpSessionBindingEvent arg0) {
	}

	public void attributeAdded(ServletContextAttributeEvent arg0) {
	}

	public void attributeRemoved(ServletContextAttributeEvent arg0) {
	}
	/**
	 * session销毁
	 */
	@Override
	public void sessionDestroyed(HttpSessionEvent evt) {
		HttpSession session = evt.getSession();
		if (session != null) {
			SessionInfo sessionInfo = (SessionInfo) session.getAttribute(Globals.USER_SESSION);
			if (sessionInfo != null) {
				SystemService systemService = (SystemService) ctx.getBean("systemService");
				systemService.deleteOnline(IpUtil.getIpAddr(req), sessionInfo.getUser());
			}
		}
	}

	@Override
	public void attributeRemoved(HttpSessionBindingEvent evt) {
		HttpSession session = evt.getSession();
		if (session != null) {
			SessionInfo sessionInfo = (SessionInfo) session.getAttribute(Globals.USER_SESSION);
			if (sessionInfo != null) {
				SystemService systemService = (SystemService) ctx.getBean("systemService");
				systemService.deleteOnline(IpUtil.getIpAddr(req), sessionInfo.getUser());
			}
		}
	}

	public void attributeAdded(ServletRequestAttributeEvent evt) {
	}
	@Override
	public void valueUnbound(HttpSessionBindingEvent evt) {
		HttpSession session = evt.getSession();
		if (session != null) {
			SessionInfo sessionInfo = (SessionInfo) session.getAttribute(Globals.USER_SESSION);
			if (sessionInfo != null) {
				SystemService systemService = (SystemService) ctx.getBean("systemService");
				systemService.deleteOnline(IpUtil.getIpAddr(req), sessionInfo.getUser());
			}
		}
	}

	public void sessionWillPassivate(HttpSessionEvent arg0) {
	}

	public void sessionCreated(HttpSessionEvent arg0) {
	}

	public void attributeReplaced(HttpSessionBindingEvent arg0) {
	}

	public void attributeReplaced(ServletContextAttributeEvent arg0) {
	}

	public void attributeRemoved(ServletRequestAttributeEvent arg0) {
	}

	public void contextDestroyed(ServletContextEvent evt) {
	}

	public void attributeReplaced(ServletRequestAttributeEvent arg0) {
	}
	
	/**
	 * 服务器初始化
	 */
	public void requestInitialized(ServletRequestEvent evt) {
		req = (HttpServletRequest)evt.getServletRequest();
	}

}

 

 

 

 

增强方法:

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

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

import jeecg.system.manager.ClientManager;

import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;


/**
 * 监听在线用户上线下线  
 */
public class OnlineListener implements ServletContextListener,HttpSessionListener {

	private static ApplicationContext ctx = null;

	public OnlineListener() {
	}

	@Override
	public void sessionCreated(HttpSessionEvent httpSessionEvent) {
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
		ClientManager.getInstance().removeClinet(httpSessionEvent.getSession().getId());
	}

	/**
	 * 服务器初始化
	 */
	@Override
	public void contextInitialized(ServletContextEvent evt) {
		ctx = WebApplicationContextUtils.getWebApplicationContext(evt.getServletContext());
	}

	public static ApplicationContext getCtx() {
		return ctx;
	}
	
	@Override
	public void contextDestroyed(ServletContextEvent paramServletContextEvent) {
		
	}

}

 

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import jeecg.system.pojo.base.Client;

/**
 * 对在线用户的管理
 
 */
public class ClientManager {
	
	private static ClientManager instance = new ClientManager();
	
	private ClientManager(){
		
	}
	
	public static ClientManager getInstance(){
		return instance;
	}
	
	private Map<String,Client> map = new HashMap<String, Client>();
	
	/**
	 * 
	 * @param sessionId
	 * @param client
	 */
	public void addClinet(String sessionId,Client client){
		map.put(sessionId, client);
	}
	/**
	 * sessionId
	 */
	public void removeClinet(String sessionId){
		map.remove(sessionId);
	}
	/**
	 * 
	 * @param sessionId
	 * @return
	 */
	public Client getClient(String sessionId){
		return map.get(sessionId);
	}
	/**
	 * 
	 * @return
	 */
	public Collection<Client> getAllClient(){
		return map.values();
	}

}

 

import java.util.Map;

/**
 * 在线用户对象
 * 
 */
public class Client implements java.io.Serializable {

	private static final long serialVersionUID = 1L;
	
	private TSUser user;

	private Map<String, TSFunction> functions;
	/**
	 * 用户IP
	 */
	private java.lang.String ip;
	/**
	 *登录时间
	 */
	private java.util.Date logindatetime;

	public TSUser getUser() {
		return user;
	}

	public void setUser(TSUser user) {
		this.user = user;
	}


	public Map<String, TSFunction> getFunctions() {
		return functions;
	}

	public void setFunctions(Map<String, TSFunction> functions) {
		this.functions = functions;
	}

	public java.lang.String getIp() {
		return ip;
	}

	public void setIp(java.lang.String ip) {
		this.ip = ip;
	}

	public java.util.Date getLogindatetime() {
		return logindatetime;
	}

	public void setLogindatetime(java.util.Date logindatetime) {
		this.logindatetime = logindatetime;
	}


}

 

import javax.persistence.Column;

/**
 * 系统用户表
 * 
 */

public class TSUser extends TSBaseUser implements java.io.Serializable {
	private static final long serialVersionUID = 1L;
	private String signatureFile;// 签名文件
	private String mobilePhone;// 手机
	private String officePhone;// 办公电话
	private String email;// 邮箱
	@Column(name = "signatureFile", length = 100)
	public String getSignatureFile() {
		return this.signatureFile;
	}

	public void setSignatureFile(String signatureFile) {
		this.signatureFile = signatureFile;
	}

	@Column(name = "mobilePhone", length = 30)
	public String getMobilePhone() {
		return this.mobilePhone;
	}

	public void setMobilePhone(String mobilePhone) {
		this.mobilePhone = mobilePhone;
	}

	@Column(name = "officePhone", length = 20)
	public String getOfficePhone() {
		return this.officePhone;
	}

	public void setOfficePhone(String officePhone) {
		this.officePhone = officePhone;
	}

	@Column(name = "email", length = 50)
	public String getEmail() {
		return this.email;
	}

	public void setEmail(String email) {
		this.email = email;
	}
}

 

在线用户的添加:
Client client = new Client();
client.setIp(IpUtil.getIpAddr(req));
client.setLogindatetime(new Date());
client.setUser(u);
ClientManager.getInstance().addClinet(session.getId(),client);

 

 

抱歉!评论已关闭.