`
小网客
  • 浏览: 1218139 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于tomcat获取在线用户数

    博客分类:
  • J2ee
 
阅读更多

需求:

统计某应用的在线用户数

实现方案:

1.基于session监听(复杂麻烦)

2.基于org.apache.catalina.Manager(依赖)

采用第二种的实现如下:

private int activeUserNumber(HttpServletRequest request) {
	int activeSessions = 0;
	try {
		if (request instanceof RequestFacade) {
			Field requestField = request.getClass().getDeclaredField(
					"request");
			requestField.setAccessible(true);
			Request req = (Request) requestField.get(request);
			org.apache.catalina.Context context = req.getContext();
			Manager manager = context.getManager();
			activeSessions = manager.getActiveSessions();
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	log.info("users:{}", activeSessions);
	return activeSessions;
}

private List<Usr> activeUsers(HttpServletRequest request) {
	List<Usr> list = new ArrayList<Usr>();
	try {
		if (request instanceof RequestFacade) {
			Field requestField = request.getClass().getDeclaredField(
					"request");
			requestField.setAccessible(true);
			Request req = (Request) requestField.get(request);
			org.apache.catalina.Context context = req.getContext();
			Manager manager = context.getManager();

			Session[] sessions = manager.findSessions();
			for (Session session : sessions) {
				 //your
			}
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	log.info("users:{}", list);
	return list;
}

 

5
4
分享到:
评论
4 楼 小网客 2015-01-22  
yin_bp 写道
这个应该是依赖tomcat容器和tomcat版本实现的吧,可以了解一下基于bboss做的会话管理功能,实现与具体容器无关,除了能够统计在线会话数,还能在监控中心管理应用会话(删除会话,查询会话数据等),参考资料:
bboss会话共享demo使用指南
bboss session共享架构及特点
bboss session共享使用方法介绍
bboss会话共享培训文档分享

对 依赖 tomcat
3 楼 yin_bp 2015-01-22  
这个应该是依赖tomcat容器和tomcat版本实现的吧,可以了解一下基于bboss做的会话管理功能,实现与具体容器无关,除了能够统计在线会话数,还能在监控中心管理应用会话(删除会话,查询会话数据等),参考资料:
bboss会话共享demo使用指南
bboss session共享架构及特点
bboss session共享使用方法介绍
bboss会话共享培训文档分享
2 楼 小网客 2015-01-22  
cywhoyi 写道
多次统计同一个人?

不是啊
1 楼 cywhoyi 2015-01-22  
多次统计同一个人?

相关推荐

Global site tag (gtag.js) - Google Analytics