java如何獲取IP和IP的歸屬地?

在Java中,獲取IP地址通常指的是獲取本地機器的IP地址或者通過某種方式(如HTTP請求)獲取的遠程IP地址。代碼案例如下:

而要獲取IP的歸屬地(地理位置信息),則通常需要使用第三方IP地址查詢服務,我這里使用的是?ip2region開源IP庫。代碼操作步驟如下:

1.導入ip2region庫:

2.在pom文件中包含該目錄下的對應資源?

3.根據IP獲取歸屬地

public static String getAddressLog(String userPhone, String ip) {try {HttpServletRequest request = RequestUtil.getRequest();log.info("======> 獲取客戶端IP地址:clientIP:{}", ip);if (StrUtil.isBlank(ip)) {log.error("獲取用戶ip失敗,用戶手機號 = " + userPhone);} else {IpLocation ipLocation = IPUtil.getLocation(ip);if (ObjectUtil.isNotNull(ipLocation.getProvince())) {//根據業務需求來確定需要定位到省還是省-市,我這里就直接是定位到省String address = ipLocation.getProvince();log.info("======> IP解析后的地址信息:{}", address);//注意:如果是內網IP的話,這里將查詢不到歸屬地,而會返回內網,//這里如果是內網IP就直接處理變成廣東省。if (StringUtils.isNotEmpty(address)){return address.contains("內網") ? "廣東省" : address;}}}} catch (Exception e) {log.error("通過ip獲取用戶位置失敗,用戶phone = {}", userPhone);log.error("通過ip獲取用戶位置失敗,e = {}", e);}
}/*** 根據iP獲取歸屬地信息*/
public static IpLocation getLocation(String ip) {IpLocation location = new IpLocation();location.setIp(ip);try (InputStream inputStream = IPUtil.class.getResourceAsStream("/ipdb/ip2region.xdb");) {byte[] bytes = IoUtil.readBytes(inputStream);Searcher searcher = Searcher.newWithBuffer(bytes);String region = searcher.search(ip);log.info("============> region:{}", region);if (StrUtil.isNotBlank(region)) {// xdb返回格式 國家|區域|省份|城市|ISP,// 只有中國的數據絕大部分精確到了城市,其他國家部分數據只能定位到國家,后前的選項全部是0String[] result = region.split("\\|");location.setCountry(ZERO.equals(result[0]) ? StrUtil.EMPTY : result[0]);location.setProvince(ZERO.equals(result[2]) ? StrUtil.EMPTY : result[2]);location.setCity(ZERO.equals(result[3]) ? StrUtil.EMPTY : result[3]);location.setIsp(ZERO.equals(result[4]) ? StrUtil.EMPTY : result[4]);}searcher.close();} catch (Exception e) {e.printStackTrace();return location;}return location;
}

?4.結果展示

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/14199.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/14199.shtml
英文地址,請注明出處:http://en.pswp.cn/web/14199.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

c++ 排序算法merge使用要求

在C中&#xff0c;std::merge是一個算法&#xff0c;它用于合并兩個已排序的范圍&#xff08;例如數組或容器中的一部分&#xff09;到一個新的范圍中。這個函數在<algorithm>頭文件中定義。 輸入范圍必須已排序 std::merge要求輸入的兩個范圍都必須是已排序的&#xf…

23種設計模式順口溜

口訣&#xff1a; 原型 抽風 &#xff0c;單獨 建造 工廠 &#xff08;寓意&#xff1a;&#xff08;這里代指本來很簡單的東西&#xff0c;卻要干工廠這里復雜的業務&#xff09; 抽風&#xff1a;抽象工廠單獨&#xff1a;單例橋代理組合享元適配器&#xff0c;&#xff0…

Microsoft VBA Excel 去重小工具

問題簡述 在本工作表中&#xff0c;A1:B3單元格樣式如下&#xff0c;通過名稱管理器B列的單元格被命名為"LinkFile"、“SheetName”、“InputArea”&#xff0c;請實現以下功能&#xff1a;讀取Excel文件中的數據&#xff0c;去除重復的數據&#xff0c;并記錄每個數…

亞馬遜云科技介紹

&#x1f525;博客主頁&#xff1a; 小羊失眠啦. &#x1f3a5;系列專欄&#xff1a;《C語言》 《數據結構》 《C》 《Linux》 ??感謝大家點贊&#x1f44d;收藏?評論?? 文章目錄 一、亞馬遜云科技云計算1.1 云計算的優勢 二、領先的云平臺三、亞馬遜云科技區域的全球網絡…

最簡單的,在mac筆記本上安裝Unix-v6系統,進行“Unix內核源碼剖析”

Unix V6 已經是 1975 年的系統了&#xff0c;但是其源代碼攏共只有 1w 行左右&#xff0c;并且使用了 C 語言&#xff08;K & R 之前的標準&#xff09;&#xff0c;還是現代操作系統的鼻祖&#xff0c;所以說是初學者最好的研究對象。 安裝模擬器 brew install simh …

【MySQL精通之路】SQL優化(1)-查詢優化(3)-索引合并

主博客&#xff1a; 【MySQL精通之路】SQL優化(1)-CSDN博客 上一篇&#xff1a; 【MySQL精通之路】SQL優化(1)-查詢優化(2)-范圍查詢優化-CSDN博客 下一篇&#xff1a; 目錄 1.索引合并-交集訪問算法 2.索引合并聯合訪問算法 3.索引合并-排序聯合訪問算法 4.影響索引合…

平衡發展與環保:理性看待地下式污水處理廠建設|中聯環保圈

這些年啊&#xff0c;隨著城市化進程越來越快&#xff0c;還有環境保護意識不斷提高&#xff0c;這地下式污水處理廠慢慢就成了熱門的建設趨勢了。據相關統計&#xff0c;全球現在運行著 200 多座地下式污水處理廠呢&#xff0c;咱國家建成和在建的數量也差不多快到 200 座啦。…

基于transformers框架實踐Bert系列4-文本相似度

本系列用于Bert模型實踐實際場景&#xff0c;分別包括分類器、命名實體識別、選擇題、文本摘要等等。&#xff08;關于Bert的結構和詳細這里就不做講解&#xff0c;但了解Bert的基本結構是做實踐的基礎&#xff0c;因此看本系列之前&#xff0c;最好了解一下transformers和Bert…

STM32入門筆記(02):USART串口通信注意事項筆記(SPL庫函數版)

這是通過串口通信發送過來的數據&#xff0c;里面包括了故障碼&#xff0c;電壓&#xff0c;電流&#xff0c;頻率等信息&#xff0c;請你用STM32f103系列單片機的串口1讀取該數據并解析出電壓和電流是多少&#xff1f; 要用STM32F103系列單片機的串口1讀取并解析發電機上的逆…

【Django項目】 音樂網站spotify復刻

代碼&#xff1a;https://github.com/tomitokko/spotify-clone 注&#xff1a;該項目不是自己提供mp3文件&#xff0c;而是使用spotify 的api接口獲取。

docker 命令總結

導出鏡像下載 centos 鏡像 docker pull centos:centos7.7.1908 常用命令 docker ps 查看正在運行的容器 docker ps -a 查看所有容器 docker images 查看本地已有鏡像 停止所有容器 docker stop $(docker ps -aq) 停止某個容器 docker stop 容器名稱 刪除所有容器 dock…

Java基礎入門day54

day54 servlet升級03 特點 當前設計又有一個問題&#xff0c;我們目前可以做到一個實體類用一個servlet&#xff0c;比如Student類的所有crud方法都可以在StudentServlet中的service方法中進行動態處理。假如又有User類&#xff0c;我們就要在UserServlet中設計service方法&a…

探索文檔識別技術在加強教育資源共享與合作中的潛力

在數字化浪潮不斷推進的今天&#xff0c;教育資源的共享與合作已經成為提高教學質量和效率的關鍵因素。文檔識別技術作為一項強大的工具&#xff0c;在這一過程中發揮著至關重要的作用。本文旨在探討如何通過文檔識別技術的應用&#xff0c;促進教育資源的有效共享與教師、學校…

MySQL主從復制故障:“ Slave_SQL_Running:No“ 兩種解決辦法

問題 今天搭建MySQL的主從復制&#xff0c;查看從機狀態時show slave status\G&#xff0c;發現這個參數為NO&#xff0c;導致主從復制失敗。 Slave_SQL_Running: No 后面上網查閱了一下資料&#xff0c;大概就是因為在連接支持數據庫后&#xff0c;也就是這個命令后&#xff…

Adobe產品安裝目錄修改

進入安裝包目錄&#xff0c;進入到products文件夾 編輯driver.xml文件 將“InstallDir”修改為你需要安裝的軟件的目錄&#xff0c;我這里是修改到D:\Adobe目錄 <DriverInfo> <ProductInfo> xxxxxxxxxxxxxxxxx </ProductInfo> 拷貝RequestInfo這部分…

c-lodop 打印面單 內容串頁

場景&#xff1a;使用c-lodop程序調取打印機連續打印多張快遞單時&#xff0c;上頁內容&#xff0c;打到了下一頁了 問題原因&#xff1a; 由于是將所有面單內容放到了一個頁面&#xff0c;c-lodop 在打印時&#xff0c;發現一頁放不下&#xff0c;會自動分割成多頁 頁面元素…

【在Postman中,如果后端返回的是String類型的數據但不是JSON格式,報錯】

在Postman中&#xff0c;如果后端返回的是String類型的數據但不是JSON格式 問題描述解決辦法 postman后端返回的String數據,不是json,怎么設置結果的接收&#xff1f; 問題描述 在postman中測試接口&#xff0c;報錯Error&#xff1a;Abort&#xff0c;或者顯示返回數據校驗失…

coveralls使用pytest進行本地測試時報錯SyntaxError: invalid escape sequence \S

## 錯誤復現&#xff1a; git clone gitgithub.com:TheKevJames/coveralls-python.git cd coveralls-python poetry install poetry run pytest## 錯誤內容&#xff1a; ## 完整的打印信息 test session starts platform darwin -- Python 3.8.18, pytest-8.2.1, pluggy-1.5.…