需求:
统计某应用的在线用户数
实现方案:
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;
}
?
原文:http://snv.iteye.com/blog/2178191