`
zjnbshifox
  • 浏览: 313095 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

HttpSessionAttributeListener 监听已登录用户信息

    博客分类:
  • Java
阅读更多
用户提出要求,需要知道哪些用户已经登录,但是在实际环境中,程序被部署到3台web上,前端用f5的负载均衡,那玩意没有玩过,幸好数据库是单一的,所以就简单建立了一个MySQL的内存表(Heap Table),来已经登录的用户信息。
package com.nbrc.lddw.util;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionAttributeListener;
import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.nbrc.lddw.interceptor.AuthorizeInterceptor;
import com.nbrc.lddw.model.OnlineInfo;
import com.nbrc.lddw.model.User;
import com.nbrc.lddw.service.OnlineUserService;
/**
 * 
 * @author fox
 * @date 2009-02-09
 * @description 已登录用户的监听
 */
public class OnlineUserListener implements HttpSessionAttributeListener {
	private static Log log = LogFactory.getLog(OnlineUserListener.class);

	public void attributeAdded(HttpSessionBindingEvent hse) {
		log.info("value bound! make session info ...");
		HttpSession session = hse.getSession();		
		ApplicationContext context = 
			WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext());
		OnlineUserService svr = (OnlineUserService)context.getBean("onlineService");
		User u = null;
		if(session.getAttribute(AuthorizeInterceptor.USR_KEY)!=null)
			u = (User) session.getAttribute(AuthorizeInterceptor.USR_KEY);
		if(u!=null && svr.findByUserId(u.getId())==null){			
				OnlineInfo info = new OnlineInfo();
				info.setSessionId(session.getId());
				info.setUserId(u.getId());
				svr.save(info);
		}else{
				log.error("can't get user in session");
		}		
	}

	public void attributeRemoved(HttpSessionBindingEvent hse) {
		HttpSession session = hse.getSession();
		ApplicationContext context = WebApplicationContextUtils.getRequiredWebApplicationContext(session.getServletContext());
		OnlineUserService svr = (OnlineUserService)context.getBean("onlineService");
		if(svr.findById(session.getId())!=null){
			svr.removeById(session.getId());				
		}
	}

	public void attributeReplaced(HttpSessionBindingEvent se) {
		// TODO Auto-generated method stub
		
	}
	

}

不过这里还有一个bug,当用户关闭浏览器的时候,还需要将Session里面的内容清除,显示的才是正确的内容。
分享到:
评论
2 楼 lerous 2010-07-27  
lerous 写道
setAttribute()方法代码中不多么?~~
这样估计程序会很累吧~~~
每个setAttribute()都会调用这个类的attributeAdded()方法~~


弄错了   session中setAttribute是不多的~~ 呵呵
1 楼 lerous 2010-07-27  
setAttribute()方法代码中不多么?~~
这样估计程序会很累吧~~~
每个setAttribute()都会调用这个类的attributeAdded()方法~~

相关推荐

    监听器显示登陆用户列表,并实现踢人功能

    监听器显示登陆用户列表,并实现踢人功能 HttpSessionAttributeListener

    HttpSessionBindingListener实现在线人员查看即人数统计

    NULL 博文链接:https://franciswmf.iteye.com/blog/1831974

    Servlet监听器例子

    关于Servlet监听器的几个例子,用于统计在线人数等等

    java监听器学习 统计在线人数

    实现在线人的显示,通过实现ServletContenxListener,HttpSessionListener,HttpSessionAttributeListener来实现在线人的展示

    企业drp系统经典源码

    * 用户登录 v1.8 sql注入的演示 v1.9 * 分销商树的展现 v2.0 * 修改区域和分销商 v2.1 * 添加区域或分销商 v2.2 * 删除区域和分销商 v2.3 * 修改密码 * 会计核算期间维护 * 建立物料对象...

    SpringSpringMvcMybatis

    ################ tips...借助Junit和Spring TestContext framework 和RestController监听器的作用: 监听对象 监听对象的属性 1:统计在线人数和在线用户 HttpSessionListener httpSessionAttributeListener 2:系统启

    学习servlet的实例和参考api

    学习servlet的实例 说明文件 blog ...类 HttpSession Cookie HttpSessionAttributeListener HttpServlet HttpServletRequest HttpServeltResponse <br>

    JAVA J2EE 类库文档

    HttpSessionAttributeListener HttpSessionBindingEvent HttpSessionBindingListener HttpSessionContext HttpSessionEvent HttpSessionListener HttpUtils RequestDispatcher Servlet ServletConfig ...

    servlet-api-2.4.jar.zip

    javax.servlet.Filter javax.servlet.Servlet javax.servlet.FilterChain ...javax.servlet.FilterConfig ...javax.servlet.http.HttpSessionAttributeListener javax.servlet.http.HttpSessionActivationListener

    java session出现的错误

    好郁闷哦,搞了两个多小时,我把先把HttpSessionAttributeListener 接口的方法实现了

    javax.servlet.jar下载

    javax.servlet.http.HttpSessionAttributeListener.class javax.servlet.http.HttpServlet.class javax.servlet.http.HttpServletRequest.class javax.servlet.http.HttpServletResponse.class javax.servlet....

    servlet2.4doc

    attributeAdded(HttpSessionBindingEvent) - Method in interface javax.servlet.http.HttpSessionAttributeListener Notification that an attribute has been added to a session. attributeAdded...

Global site tag (gtag.js) - Google Analytics