有一个多用户的Javaweb系统,如何采集每个用户使用该系统时所消耗的网络流量啊?注意是每个用户的,而不是所有用户加在一起总流量。
现在比较着急的问题就是当用户使用系统时,如何采集到用户的ip值和该ip所使用的网络流量,并且要将 时间+ip+网络流量 信息保存下来,然后要在web前端进行显示,后续还会利用这些信息进行统计分析。
这里为什么要获得ip的原因是用户可以在任意地点使用系统,用户没有对应的固定ip,我要通过这个ip值才能知道是哪个用户在使用。
如果用struts2的话,可以用拦截器,也可以用web服务器的过滤器来实现流量的统计。
看你用的是什么框架,一般都可以用拦截器解决的
/**
* 获取客户端ip地址(可以穿透代理)
*
* @param request
* @return
*/
public static String getRemoteAddr(HttpServletRequest request) {
String ip = request.getHeader("X-Forwarded-For");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
private static final String[] HEADERS_TO_TRY = {
"X-Forwarded-For",
"Proxy-Client-IP",
"WL-Proxy-Client-IP",
"HTTP_X_FORWARDED_FOR",
"HTTP_X_FORWARDED",
"HTTP_X_CLUSTER_CLIENT_IP",
"HTTP_CLIENT_IP",
"HTTP_FORWARDED_FOR",
"HTTP_FORWARDED",
"HTTP_VIA",
"REMOTE_ADDR",
"X-Real-IP"};