91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot+Echarts如何實現用戶訪問地圖可視化

發布時間:2021-07-18 17:19:28 來源:億速云 閱讀:252 作者:小新 欄目:編程語言

這篇文章主要介紹SpringBoot+Echarts如何實現用戶訪問地圖可視化,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

SpringBoot+Echarts用戶訪問地圖可視化

意義

  •  在常見的電商、新聞、社交網站等,合理運用運營成本才能最大化輸出自己的產品,其中最常見的功能就有針對不同訪問熱度的城市制定不同的運營手段,因此我們掌握用戶城市分布情況至關重要。

  •  pc端與移動端不同,無法依托手機自帶的gps定位到用戶所在城市,只能通過ip來進行判斷所在地理位置。

根據ip獲取城市的方式

  •  淘寶、新浪等常年提供根據ip獲取城市的接口,但是隔一段時間會出現接口地址更改的情況,也有一定的限流

  •  開源純真ip庫:不斷迭代更新ip庫內容,一般場景下足以使用,自主可控。(下載qqwry.dat庫)

思路

首先需要獲取用戶請求的ip地址,我們對該方法進行簡單封裝:

public class IPUtil {      public static String getIpAddress(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;      }  }

封裝純真ip的解析工具,根據ip獲取請求地址所在城市,github有大量實現版本,我們這里不做贅述,具體代碼見文末源碼

//篇幅較長,截取的主要方法,詳細在源碼地址查看      public IPZone findIP(final String ip) {          final long ipNum = toNumericIP(ip);          final QIndex idx = searchIndex(ipNum);          if (idx == null) {              return new IPZone(ip);          }          return readIP(ip, idx);  }

自定義攔截器,對用戶的登錄請求進行攔截,在此處判斷請求ip所在城市,并進行計數。我們這里只是簡單邏輯的說明,在生產上時應該用redis來存放計數,并且專門提供一個rest接口來推送當前各城市訪問數量情況,再由前端配合,隔一段時間發起一次請求,例如隔一小時請求一次該rest接口,從而進行前端數據的展示。

/**   * 登錄攔截器   */  @Slf4j  public class MyLoginInterceptor implements HandlerInterceptor {      private static final String LOGIN_PATH = "/user/login";      private static Map<String, AtomicInteger> visitCount;      private static final QQWry qqWry;      static {          visitCount = new HashMap<>(31);          qqWry = new QQWry();      }     //展示訪問數量不是精確指標,如果要做到完全正確需要使用鎖,防止計數存在并發問題      @Override      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {          log.info("【MyLoginInterceptor】調用了:{}", request.getRequestURI());          if (request.getRequestURI().equals(LOGIN_PATH)) {              String ipAddress = IPUtil.getIpAddress(request);              String province = qqWry.findIP(ipAddress).getMainInfo();              if (visitCount.containsKey(province)) {                  visitCount.put(province,new AtomicInteger(visitCount.get(province).incrementAndGet()));              } else {                  visitCount.put(province,new AtomicInteger());              }          }          return true;      }      @Override      public void postHandle(HttpServletRequest request, HttpServletResponse response,                             Object handler, ModelAndView modelAndView) throws Exception {}      @Override      public void afterCompletion(HttpServletRequest request, HttpServletResponse response,                                  Object handler, Exception ex){}  }

注冊自定義的攔截器

@Configuration  public class WebMvcConfig implements WebMvcConfigurer {      @Override      public void addInterceptors(InterceptorRegistry registry) {          registry.addInterceptor(new MyLoginInterceptor());      }  }

登錄controller模擬邏輯,注意:如果想看效果圖需要自己寫線程用不同的虛擬ip進行訪問url,從而達到在不同城市訪問接口的效果。

@RestController("user") public class LoginController {     @GetMapping("login")      public String login() {          //登錄邏輯          return "success";      }  }

最終效果

SpringBoot+Echarts如何實現用戶訪問地圖可視化

前后端源碼

https://github.com/Motianshi/distribute-tool

以上是“SpringBoot+Echarts如何實現用戶訪問地圖可視化”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

塔城市| 花莲县| 镇雄县| 金湖县| 昆明市| 永安市| 邢台市| 达孜县| 赤壁市| 天长市| 安岳县| 望江县| 武宣县| 静海县| 泰顺县| 苍溪县| 轮台县| 定襄县| 吉林市| 桐庐县| 台山市| 合江县| 眉山市| 高州市| 梁河县| 万山特区| 琼中| 吐鲁番市| 右玉县| 镇宁| 湘潭县| 宁德市| 天津市| 金阳县| 黄浦区| 南和县| 沈丘县| 武安市| 赤水市| 太原市| 新郑市|