https://blog.csdn.net/smallnetvisitor/article/details/84697505
需求:
统计某应用的在线用户数
实现方案:
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;
-
}