Bagaimana Spring Boot cepat melaksanakan resolusi alamat IP
Pengenalan:
Jika anda menggunakan resolusi IP tempatan, kami akan menggunakan ip2region Projek ini mengekalkan jadual surat-menyurat alamat IP tempatan yang lebih terperinci. Jika anda ingin menggunakannya dalam persekitaran luar talian, anda perlu mengimport projek ini Bergantung pada, dan nyatakan versi, kaedah versi berbeza mungkin berbeza.
<!-- ip库--> <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>2.6.3</version> </dependency>
Pembangunan:
Anda perlu memuat turun fail xdb ke direktori fail projek semasa menggunakannya Walaupun anda menggunakan ip2region untuk membuat pertanyaan sepenuhnya berdasarkan fail xdb, masa tindak balas a pertanyaan tunggal berada pada tahap sepuluh mikrosaat , pertanyaan dipercepatkan memori boleh didayakan dalam dua cara berikut:
cache indeks vIndex: Gunakan ruang memori 512KiB tetap untuk menyimpan data indeks vektor. , mengurangkan satu operasi cakera IO, dan mengekalkan kecekapan pertanyaan purata Stabil antara 10-20 mikrosaat.
xdb keseluruhan cache fail: Muatkan keseluruhan fail xdb ke dalam memori, penggunaan memori adalah sama dengan saiz fail xdb, tiada operasi cakera IO dan kecekapan pertanyaan peringkat mikrosaat dikekalkan.
/** * ip查询 */ @Slf4j public class IPUtil { private static final String UNKNOWN = "unknown"; protected IPUtil(){ } /** * 获取 IP地址 * 使用 Nginx等反向代理软件, 则不能通过 request.getRemoteAddr()获取 IP地址 * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址, * X-Forwarded-For中第一个非 unknown的有效IP字符串,则为真实IP地址 */ public static String getIpAddr(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.getRemoteAddr(); } return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip; } public static String getAddr(String ip){ String dbPath = "src/main/resources/ip2region/ip2region.xdb"; // 1、从 dbPath 加载整个 xdb 到内存。 byte[] cBuff; try { cBuff = Searcher.loadContentFromFile(dbPath); } catch (Exception e) { log.info("failed to load content from `%s`: %s\n", dbPath, e); return null; } // 2、使用上述的 cBuff 创建一个完全基于内存的查询对象。 Searcher searcher; try { searcher = Searcher.newWithBuffer(cBuff); } catch (Exception e) { log.info("failed to create content cached searcher: %s\n", e); return null; } // 3、查询 try { String region = searcher.searchByStr(ip); return region; } catch (Exception e) { log.info("failed to search(%s): %s\n", ip, e); } return null; }
Di sini kami merangkumkan resolusi ip ke dalam kelas alat, termasuk dua kaedah untuk mendapatkan resolusi IP dan alamat ip. Resolusi ip boleh diperolehi dalam permintaan. Selepas memperoleh IP, anda perlu mencari resolusi alamat IP yang sepadan dalam xdb berdasarkan IP Memandangkan pangkalan data tempatan mungkin mempunyai kekurangan tertentu, sesetengah IP tidak dapat diselesaikan.
Analisis dalam talian:
Jika anda ingin mendapatkan maklumat alamat IP yang lebih komprehensif, anda boleh menggunakan pangkalan data dalam talian Apa yang disediakan di sini ialah analisis IP whois.pconline.com analisis ada dalam saya Prestasi sangat lancar semasa penggunaan, dan hanya beberapa IP tidak dapat diselesaikan.
@Slf4j public class AddressUtils { // IP地址查询 public static final String IP_URL = "http://whois.pconline.com.cn/ipJson.jsp"; // 未知地址 public static final String UNKNOWN = "XX XX"; public static String getRealAddressByIP(String ip) { String address = UNKNOWN; // 内网不查询 if (IpUtils.internalIp(ip)) { return "内网IP"; } if (true) { try { String rspStr = sendGet(IP_URL, "ip=" + ip + "&json=true" ,"GBK"); if (StrUtil.isEmpty(rspStr)) { log.error("获取地理位置异常 {}" , ip); return UNKNOWN; } JSONObject obj = JSONObject.parseObject(rspStr); String region = obj.getString("pro"); String city = obj.getString("city"); return String.format("%s %s" , region, city); } catch (Exception e) { log.error("获取地理位置异常 {}" , ip); } } return address; } public static String sendGet(String url, String param, String contentType) { StringBuilder result = new StringBuilder(); BufferedReader in = null; try { String urlNameString = url + "?" + param; log.info("sendGet - {}" , urlNameString); URL realUrl = new URL(urlNameString); URLConnection connection = realUrl.openConnection(); connection.setRequestProperty("accept" , "*/*"); connection.setRequestProperty("connection" , "Keep-Alive"); connection.setRequestProperty("user-agent" , "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)"); connection.connect(); in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType)); String line; while ((line = in.readLine()) != null) { result.append(line); } log.info("recv - {}" , result); } catch (ConnectException e) { log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e); } catch (SocketTimeoutException e) { log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e); } catch (IOException e) { log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e); } catch (Exception e) { log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e); } finally { try { if (in != null) { in.close(); } } catch (Exception ex) { log.error("调用in.close Exception, url=" + url + ",param=" + param, ex); } } return result.toString(); } }
Senario:
Jadi dalam proses pembangunan apakah yang lebih sesuai untuk mendapatkan alamat IP kami akan digunakan di sini? Minta setiap permintaan yang memasuki perkhidmatan, lakukan pra-operasi dan lengkapkan penghuraian pengepala permintaan, pemerolehan IP dan resolusi alamat IP apabila masuk, supaya alamat IP dan maklumat lain boleh digunakan semula dalam semua proses berikutnya.
/** * 对ip 进行限制,防止IP大量请求 */ @Slf4j @Configuration public class IpUrlLimitInterceptor implements HandlerInterceptor{ @Override public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) { //更新全局变量 Constant.IP = IPUtil.getIpAddr(httpServletRequest); Constant.IP_ADDR = AddressUtils.getRealAddressByIP(Constant.IP); Constant.URL = httpServletRequest.getRequestURI(); return true; } @Override public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) { //通过本地获取 // 获得ip // String ip = IPUtil.getIpAddr(httpServletRequest); //解析具体地址 // String addr = IPUtil.getAddr(ip); //通过在线库获取 // String ip = IpUtils.getIpAddr(httpServletRequest); // String ipaddr = AddressUtils.getRealAddressByIP(ipAddr); // log.info("IP >> {},Address >> {}",ip,ipaddr); } @Override public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) { } }
如果想要执行我们的ip 解析拦截器,需要在spring boot的视图层进行拦截才会触发我们的拦截器。
@Configuration public class WebConfig implements WebMvcConfigurer { @Autowired IpUrlLimitInterceptor ipUrlLimitInterceptor; //执行ip拦截器 @Override public void addInterceptors(InterceptorRegistry registry){ registry.addInterceptor(ipUrlLimitInterceptor) // 拦截所有请求 .addPathPatterns("/**"); } }
通过这样的一套流程下来,我们就能实现对每一个请求进行ip 获取、ip解析,为每个请求带上具体ip地址的小尾巴。
Atas ialah kandungan terperinci Bagaimana Spring Boot cepat melaksanakan resolusi alamat IP. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



Xiaohongshu ialah platform e-dagang sosial yang popular di mana pengguna boleh berkongsi kehidupan harian mereka dan menemui produk kegemaran mereka. Sesetengah pengguna lebih sensitif terhadap privasi peribadi dan berharap alamat IP mereka tidak akan dipaparkan pada Xiaohongshu untuk melindungi privasi dalam talian mereka. Jadi, bagaimana untuk menetapkan Xiaohongshu supaya tidak memaparkan alamat IP? Artikel ini akan menjawab soalan ini secara terperinci. 1. Bagaimana untuk menetapkan Xiaohongshu supaya tidak memaparkan alamat IP? 1. Ubah suai tetapan Xiaohongshu: Buka APP Xiaohongshu, klik "Saya" di penjuru kanan sebelah bawah untuk memasuki pusat peribadi. Kemudian klik pada avatar untuk memasukkan tetapan akaun. Dalam tetapan akaun, cari "Tetapan Privasi" dan klik untuk masuk. Di sini, anda boleh mencari pilihan tetapan untuk alamat IP, matikan sahaja. 2. Kosongkan cache: Kadangkala, Xiaohongshu mungkin memaparkan ralat

Kadang-kadang semua orang menghadapi keperluan untuk mengubah suai alamat IP secara manual, tetapi sesetengah pelanggan Windows 10 melaporkan bahawa alamat IP tidak boleh disimpan selepas menetapkannya Bagaimana untuk menyelesaikan situasi ini? Alamat IP disimpan pada asasnya kerana terdapat ralat dalam mengisi alamat IP anda Anda boleh menyemak sama ada awalan subnet telah ditulis dengan subnet mask Jika ya, tukarkannya semula. alamat IP. Bagaimana untuk menyelesaikan masalah bahawa alamat IP Windows 10 tidak boleh disimpan selepas ia ditetapkan: Gambar ralat adalah seperti berikut: Gesaan "Tidak dapat menyimpan tetapan IP, sila semak satu atau lebih tetapan dan cuba" disebabkan oleh mengisi ralat ini ialah panjang awalan subnet, bukan topeng subnet Seperti yang ditunjukkan dalam gambar. Seperti yang ditunjukkan dalam gambar di atas, ramai pengguna sebenarnya menulis awalan subnet sebagai topeng subnet.

Di manakah alamat IP telefon bimbit Xiaomi? Anda boleh menyemak alamat IP pada telefon bimbit Xiaomi, tetapi kebanyakan pengguna tidak tahu di mana untuk menyemak alamat IP Seterusnya ialah tutorial grafik tentang cara menyemak alamat IP telefon bimbit Xiaomi telefon yang dibawa oleh editor. Pengguna yang berminat datang dan lihat! Di manakah alamat IP telefon bimbit Xiaomi? . Kemudian pada halaman Semua Parameter , slaid ke bawah dan pilih [Maklumat Status] 4. Akhir sekali, anda boleh melihat alamat IP dalam antara muka maklumat status.

Xianyu ialah platform dagangan terpakai yang sangat praktikal Di sini kita boleh membeli pelbagai produk dan menjual barangan terbiar kita sendiri. Bagaimana jika kita ingin mengubah suai alamat kita. Mari lihat dengan editor di bawah! Kongsi cara mengubah suai alamat IP Xianyu Pertama, buka perisian Xianyu Selepas memasuki laman utama, anda boleh melihat pasaran makanan laut, cadangan, alamat dan pilihan lain di sudut kiri atas. 2. Kemudian pada halaman alamat, kami klik [Anak Panah Bawah] di sebelah alamat 3. Selepas klik terakhir, kami klik pada bandar pada halaman pemilihan bandar;

Pengguna berkongsi kehidupan mereka, menunjukkan bakat mereka, dan berinteraksi dengan netizen di seluruh negara dan juga dunia melalui Douyin. Sesetengah pengguna ingin menukar alamat IP mereka di Douyin atas sebab seperti perlindungan privasi atau sekatan geografi. Jadi, bagaimanakah alamat IP Douyin menukar lokasinya? 1. Bagaimana untuk menukar lokasi alamat IP Douyin? Pelayan proksi ialah perkhidmatan perantara yang digunakan untuk memajukan permintaan pengguna ke Internet dan mengembalikan respons. Dengan mengkonfigurasi pelayan proksi, pengguna boleh menyembunyikan alamat IP sebenar mereka dan menukar alamat IP mereka. Pendekatan ini membantu melindungi privasi pengguna dan meningkatkan keselamatan rangkaian. Pelayan proksi juga boleh digunakan untuk mengakses kandungan terhad atau memintas sekatan geolokasi. Secara umumnya, menggunakan pelayan proksi ialah alat rangkaian praktikal yang boleh membantu pengguna melayari Internet dengan lebih selamat dan bebas.

Springboot membaca fail, tetapi tidak boleh mengakses perkembangan terkini selepas membungkusnya ke dalam pakej balang Terdapat situasi di mana springboot tidak boleh membaca fail selepas membungkusnya ke dalam pakej balang adalah tidak sah dan hanya boleh diakses melalui strim. Fail berada di bawah resources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

Dengan perkembangan pesat Internet, alamat IP telah menjadi bahagian penting dalam komunikasi rangkaian. Maklumat alamat IP sangat penting dalam pemantauan keselamatan rangkaian, pengurusan trafik dan pengiklanan e-dagang yang disasarkan. Oleh itu, untuk memudahkan pengguna menanyakan maklumat alamat IP/nama domain, banyak laman web menyediakan fungsi pertanyaan alamat IP. Artikel ini akan memperkenalkan cara menggunakan PHP untuk melaksanakan fungsi pertanyaan alamat IP untuk rujukan pembaca. 1. Apakah alamat IP? Alamat IP (InternetProtocolAddress) ialah protokol rangkaian

Alamat IP transaksi Bitcoin Alamat IP transaksi Bitcoin adalah komponen penting dan penting dalam sistem transaksi Bitcoin. Ia adalah teras platform dagangan Bitcoin di mana pedagang Bitcoin boleh menjalankan transaksi Bitcoin. Alamat IP transaksi Bitcoin adalah asas sistem transaksi Bitcoin dan asas di mana pedagang Bitcoin boleh menjalankan transaksi Bitcoin. Alamat IP perdagangan Bitcoin ialah alamat rangkaian global yang digunakan untuk mencari pelayan sistem perdagangan Bitcoin dan peranti pedagang. Dengan menanyakan alamat IP transaksi Bitcoin, anda boleh mendapatkan status transaksi dan maklumat berkaitan. Selain itu, alamat IP perdagangan Bitcoin juga boleh digunakan untuk menghubungkan pelanggan kepada sistem perdagangan Bitcoin dan peranti pedagang. Adakah alamat IP transaksi Bitcoin awam? Alamat IP transaksi Bitcoin tidak akan didedahkan kepada umum
