使用ip2region獲取客戶端地區

目錄

從gitee拉取ip2region.xdb資源文件

?寫測試類

注意要寫對資源路徑

?本地測試結果

?編輯?遠端測試結果


從gitee拉取ip2region.xdb資源文件

git clone https://gitee.com/lionsoul/ip2region.git

?將xdb放入resources資源文件夾

引入依賴?

<dependency><groupId>org.lionsoul</groupId><artifactId>ip2region</artifactId><version>2.7.0</version>
</dependency>

?

寫測試類

     private Searcher searcher;@GetMapping("test")@ApiOperation("test")public String test() throws IOException  {HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();String ipAddress = null;try {// 獲取請求客戶端的ipipAddress = request.getHeader("x-forwarded-for");if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("Proxy-Client-IP");}if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getHeader("WL-Proxy-Client-IP");}if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {ipAddress = request.getRemoteAddr();if (ipAddress.equals("127.0.0.1")||ipAddress.equals("0:0:0:0:0:0:0:1")) {ipAddress = "127.0.0.1";}}// 判斷ip是否符合規格if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length()// = 15if (ipAddress.indexOf(",") > 0) {ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));}}} catch (Exception e) {ipAddress="";}if ("127.0.0.1".equals(ipAddress) || ipAddress.startsWith("192.168")) {return "局域網 ip";}String dbPath;if (searcher == null) {try {// 加載ip2region 文件searcher=Searcher.newWithFileOnly("pipayshop-api/src/main/resources/ipdb/ip2region.xdb");} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}String region = null;String errorMessage = null;try {// 獲取地區region = searcher.search(ipAddress);} catch (Exception e) {errorMessage = e.getMessage();if (errorMessage != null && errorMessage.length() > 256) {errorMessage = errorMessage.substring(0,256);}e.printStackTrace();}// 輸出 regionreturn region;}

注意要寫對資源路徑

本地的資源路徑

遠端服務器資源路徑(需要與你寫的路徑一一對應,不然找不到文件)

?本地測試結果

?遠端測試結果

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

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

相關文章

由淺入深C系列五:使用libcurl進行基于http get/post模式的C語言交互應用開發

使用libcurl進行基于http get/post模式的C語言交互應用開發 簡介環境準備在線資源示例代碼測試調用運行結果 簡介 大多數在linux下的開發者&#xff0c;都會用到curl這個命令行工具。對于進行restful api的測試等&#xff0c;非常方便。其實&#xff0c;這個工具還提供了一個C…

Python中單引號、雙引號和三引號的區別

① 單引號和雙引號主要用來表示字符串 # 單引號 astr = Python print(type(astr)) # <class str># 雙引號"" bstr = "Python" print(type(bstr)) # <class str> str1 = I\m a big fan of Python. print(str1) # Im a big fan of Python.s…

[HDLBits] Exams/m2014 q4d

Implement the following circuit: module top_module (input clk,input in, output out);always(posedge clk) beginout<out^in;end endmodule直接寫out^in就行

Vue 使用 vite 創建項目

vite 是新一代前端構建工具&#xff0c;和 webpack 類似。 vite 的啟動速度更快。在開發環境中&#xff0c;不需要打包就可以直接運行。 vite 的更新速度更快。當修改內容后&#xff0c;不需要刷新瀏覽器&#xff0c;頁面就會實時更新。 vite 完全是按需編譯。它只會編譯需要…

【考研數學】高等數學第三模塊——積分學 | Part II 定積分(反常積分及定積分應用)

文章目錄 前言三、廣義積分3.1 斂散性概念&#xff08;一&#xff09;積分區間為無限的廣義積分&#xff08;二&#xff09;積分區間有限但存在無窮間斷點 3.2 斂散性判別法 四、定積分應用寫在最后 前言 承接前文&#xff0c;梳理完定積分的定義及性質后&#xff0c;我們進入…

企業網盤 vs 傳統存儲設備:為何云存儲成為首選?

企業網盤的出現為企業提供了新的存儲方式&#xff0c;相較于傳統的存儲設備&#xff0c;為何越來越多的企業選擇了云存儲呢&#xff1f; 一、存儲成本 在企業數據存儲方面&#xff0c;成本是企業重要的考量因素。企業網盤是基于云存儲技術的存儲工具&#xff0c;因此它比傳統的…

基于DBN的偽測量配電網狀態估計,DBN的詳細原理

目錄 背影 DBN神經網絡的原理 DBN神經網絡的定義 受限玻爾茲曼機(RBM) DBN的偽測量配電網狀態估計 基本結構 主要參數 數據 MATALB代碼 結果圖 展望 背影 DBN是一種深度學習神經網絡,擁有提取特征,非監督學習的能力,是一種非常好的分類算法,本文將DBN算法偽測量配電網…

Netty:ByteBuf的資源釋放方法

說明 io.netty.buffer.ByteBuf實現了io.netty.util.ReferenceCounted接口&#xff0c;需要顯式釋放。當ByteBuf被實例化后&#xff0c;它的引用計數是1。 調用ByteBuf對象的release方法釋放&#xff1a; ByteBuf的release()方法使引用計數減少1。只有當執行以后引用計數減少…

OpenZFS 2.2 發布 RC3,支持 Linux 6.4

導讀之前的 OpenZFS 2.2 候選版本已致力于實現與 Linux 6.4 內核的兼容性&#xff0c;而在 2.2-rc3 中&#xff0c;Linux 6.4 支持的元跟蹤器已標記為已完成。 OpenZFS 2.2 發布了第 3 個 RC 版本。 之前的 OpenZFS 2.2 候選版本已致力于實現與 Linux 6.4 內核的兼容性&#x…

Vue3 引用第三方Swiper內容觸摸滑動簡單應用

去官網查看更多教程→&#xff1a;Swiper官網 → 點擊教程在vue中使用Swiper→ 在Vue中使用Swiper cd 到項目 安裝Swiper&#xff1a; cnpm install --save swiper 安裝指定版本 cnpm install --save swiper8.1.6 9.4.1 10.1.0…

SpringBoot-Hello World

SpringBootWeb快速入門 創建Springboot工程&#xff0c;并勾選web開發相關依賴定義HelloController類&#xff0c;添加方法hello&#xff0c;并添加相關注釋運行測試 創建新的SpringBoot項目 幾個注意的點&#xff1a; Name&#xff1a;基本上不用管&#xff0c;會根據下面的Ar…

關于elementui的input的autocomplete的使用

項目中需要實現搜索框搜索時能自動提示可選項的功能&#xff0c;elementui的input組件有已經封裝好的el-autocomplete可以使用&#xff0c;但是在使用中發現一些問題&#xff0c;記錄一下 基礎使用 // html部分 <el-autocompletev-model"name":fetch-suggestion…

大數據課程I3——Kafka的消息流與索引機制

文章作者郵箱:yugongshiye@sina.cn 地址:廣東惠州 ▲ 本章節目的 ? 掌握Kafka的消息流處理; ? 掌握Kafka的索引機制; ? 掌握Kafka的消息系統語義; 一、Kafka消息流處理 1. Producer 寫入消息 流程說明: 1. producer 要向Kafka生產消息,需要先通過…

EditPlus連接Linux系統遠程操作文件

EditPlus是一套功能強大的文本編輯器&#xff01; 1.File ->FTP->FTP Settings&#xff1b; 2.Add->Description->FTP server->Username->Password->Subdirectory->Advanced Options 注意&#xff1a;這里的Subdirectory設置的是以后上傳文件的默認…

20230814讓惠普(HP)銳14 新AMD銳龍電腦不聯網進WIN11進系統

20230814讓惠普(HP)銳14 新AMD銳龍電腦不聯網進WIN11進系統 2023/8/14 17:19 win11系統無法跳過聯網 https://www.xpwin7.com/jiaocheng/28499.html Win11開機聯網跳過不了怎么辦&#xff1f;Win11開機聯網跳過不了解決方法 Win11開機聯網跳過不了怎么辦&#xff1f;Win11開機…

Unity框架學習--5 事件中心管理器

作用&#xff1a;訪問其它腳本時&#xff0c;不直接訪問&#xff0c;而是通過發送一條“命令”&#xff0c;讓監聽了這條“命令”的腳本自動執行對應的邏輯。 原理&#xff1a; 1、讓腳本向事件中心添加事件&#xff0c;監聽對應的“命令”。 2、發送“命令”&#xff0c;事件…

【Sklearn】基于支持向量機算法的數據分類預測(Excel可直接替換數據)

【Sklearn】基于支持向量機算法的數據分類預測(Excel可直接替換數據) 1.模型原理1.1 數學模型1.2 模型原理2.模型參數3.文件結構4.Excel數據5.下載地址6.完整代碼7.運行結果1.模型原理 支持向量機(Support Vector Machine,SVM)是一種用于分類和回歸的監督學習算法,其基本…

【Git】安裝以及基本操作

目錄 一、初識Git二、 在Linux底下安裝Git一&#xff09;centOS二&#xff09;Ubuntu 三、 Git基本操作一&#xff09; 創建本地倉庫二&#xff09;配置本地倉庫三&#xff09;認識工作區、暫存區、版本庫四&#xff09;添加文件五&#xff09;查看.git文件六&#xff09;修改文…

基于docker部署的Selenium Grid分布式自動化測試

01、什么是Selenium Grid Selenium Grid是Selenium套件的一部分&#xff0c;它專門用于并行運行多個測試用例在不同的瀏覽器、操作系統和機器上。 Selenium Grid有兩個版本——老版本Grid 1和新版本Grid 2。我們只對新版本做介紹&#xff0c;因為Selenium團隊已經逐漸遺棄老版…

docker容器管理

創建容器&#xff1a; docker run --name 容器名 -d -p 端口1:端口2 –name :是啟動容器時&#xff0c;給容器定義的名稱&#xff0c;不使用該參數時&#xff0c;容器啟動成功之后&#xff0c;會生成隨機名稱 -d &#xff1a;代表容器處于后臺yunx -p &#xff1a;指定容器的端…