SpringBoot+Echarts用户访问图可视化在常见的电商、新闻、社交网站等方面很有意义,只有合理使用运营成本才能最大化我们自己产品的输出。最常见的功能就是针对不同访问热度的城市制定不同的运营方式,所以掌握用户城市的分布对于我们来说非常重要。PC端不同于移动端。它不能依靠手机的GPS来定位用户所在的城市。只能通过IP判断地理位置。淘宝、新浪等常年提供基于IP获取城市的接口,但一段时间后接口地址会发生变化,也有一定限流的开源纯IP库:不断迭代更新IP库内容,通用场景简单易用,自主可控。(下载qqwry.dat库)idea首先需要获取用户请求的ip地址。我们简单封装了这个方法:publicclassIPUtil{publicstaticStringgetIpAddress(HttpServletRequestrequest){Stringip=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();}returnip;}}封装了纯ip分析工具,根据ip获取请求地址所在城市,github有大量实现版本,这里不再赘述,具体代码见文末源码//篇幅较长,主要拦截方法n,查看源地址获取详情publicIPZonefindIP(finalStringip){finallongipNum=toNumericIP(ip);finalQIndexidx=searchIndex(ipNum);if(idx==null){returnnewIPZone(ip);}returnreadIP(ip,idx);}自定义拦截器,拦截用户的登录请求,在这里判断请求ip所在的城市,统计我们是只是在这里解释简单的逻辑。生产中要用redis存储计数,专门提供一个rest接口推送当前每个城市的访问次数,然后前端配合每隔一段时间发起一次请求,比如每一小时。请求一次rest接口,展示前端数据。/***登录拦截器*/@Slf4jpublicclassMyLoginInterceptorimplementsHandlerInterceptor{privatestaticfinalStringLOGIN_PATH="/user/login";privatestaticMap
