需求:
统计某应用的在线用户数
实现方案:
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 ListactiveUsers(HttpServletRequest request) { List list = new ArrayList (); 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;}