Wie Spring Boot die IP-Adressauflösung schnell implementiert
Einführung:
Wenn Sie eine lokale IP-Auflösung verwenden, verwenden wir ip2region. Dieses Projekt verwaltet eine detailliertere lokale IP-Adresskorrespondenztabelle. Wenn Sie es in einer Offline-Umgebung verwenden möchten, müssen Sie die Projektabhängigkeiten importieren und angeben Version. Die Methoden können je nach Version unterschiedlich sein.
<!-- ip库--> <dependency> <groupId>org.lionsoul</groupId> <artifactId>ip2region</artifactId> <version>2.6.3</version> </dependency>
Entwicklung:
Sie müssen die xdb-Datei in das Projektdateiverzeichnis herunterladen, wenn Sie ip2region verwenden, um eine vollständige Abfrage basierend auf der xdb-Datei durchzuführen, die Antwortzeit einer einzelnen Abfrage liegt bei zehn Mikrosekunden. Es kann auf zwei Arten geöffnet werden:
vIndex-Index-Cache: Verwenden Sie einen festen 512-KiB-Speicherplatz, um Vektorindexdaten zwischenzuspeichern, einen E/A-Festplattenvorgang zu reduzieren und die durchschnittliche Abfrageeffizienz stabil zu halten 10–20 Mikrosekunden.
xdb-Gesamtdateicache: Laden Sie die gesamte xdb-Datei in den Speicher. Der Speicherbedarf entspricht der Größe der xdb-Datei, wodurch die Abfrageeffizienz auf Mikrosekundenebene erhalten bleibt.
/** * 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; }
Hier kapseln wir die IP-Auflösung in einer Tool-Klasse, einschließlich zweier Methoden zum Abrufen der IP- und IP-Adressauflösung. Die IP-Auflösung kann in der Anfrage abgerufen werden. Nachdem Sie die IP erhalten haben, müssen Sie die Auflösung der entsprechenden IP-Adresse in xdb basierend auf der IP finden. Da die lokale Datenbank möglicherweise bestimmte Mängel aufweist, können einige IPs nicht aufgelöst werden.
Online-Analyse:
Wenn Sie umfassendere IP-Adressinformationen erhalten möchten, können Sie die Online-Datenbank verwenden. Hier wird die IP-Analyse von whois.pconline.com durchgeführt. und nur wenige IPs können nicht aufgelöst werden.
@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(); } }
Szenario:
In welchem Entwicklungsprozess ist es also sinnvoller, die IP-Adresse zu erhalten? Fangen Sie jede in den Dienst eingehende Anfrage ab, führen Sie Voroperationen durch und schließen Sie bei der Eingabe das Parsen des Anforderungsheaders, die IP-Erfassung und die Auflösung der IP-Adresse ab, sodass die IP-Adresse und andere Informationen in allen nachfolgenden Prozessen wiederverwendet werden können.
/** * 对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地址的小尾巴。
Das obige ist der detaillierte Inhalt vonWie Spring Boot die IP-Adressauflösung schnell implementiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Xiaohongshu ist eine beliebte soziale E-Commerce-Plattform, auf der Benutzer ihr tägliches Leben teilen und ihre Lieblingsprodukte entdecken können. Einige Benutzer achten sensibler auf die Privatsphäre und hoffen, dass ihre IP-Adresse nicht auf Xiaohongshu angezeigt wird, um ihre Online-Privatsphäre zu schützen. Wie kann man Xiaohongshu so einstellen, dass die IP-Adresse nicht angezeigt wird? In diesem Artikel wird diese Frage ausführlich beantwortet. 1. Wie kann man Xiaohongshu so einstellen, dass die IP-Adresse nicht angezeigt wird? 1. Ändern Sie die Xiaohongshu-Einstellungen: Öffnen Sie die Xiaohongshu-App und klicken Sie unten rechts auf „Ich“, um das persönliche Zentrum aufzurufen. Klicken Sie dann auf den Avatar, um die Kontoeinstellungen einzugeben. Suchen Sie in den Kontoeinstellungen nach „Datenschutzeinstellungen“ und klicken Sie zum Aufrufen. Hier finden Sie die Einstellungsmöglichkeiten für die IP-Adresse, schalten Sie diese einfach aus. 2. Cache leeren: Manchmal zeigt Xiaohongshu einen Fehler an

Manchmal muss jeder die IP-Adresse manuell ändern, aber einige Windows 10-Kunden berichten, dass die IP-Adresse nach dem Festlegen nicht gespeichert werden kann. Die IP-Adresse wird grundsätzlich gespeichert, da bei der Eingabe Ihrer IP-Adresse ein Fehler aufgetreten ist. Sie können überprüfen, ob das Subnetzpräfix mit der Subnetzmaske geschrieben wurde. Wenn ja, können Sie es normal zurückspeichern. IP-Adresse. So lösen Sie das Problem, dass die Windows 10-IP-Adresse nach dem Festlegen nicht gespeichert werden kann: Das Fehlerbild sieht wie folgt aus: Die Meldung „Die IP-Einstellungen konnten nicht gespeichert werden, bitte überprüfen Sie eine oder mehrere Einstellungen und versuchen Sie es“ wird durch das Ausfüllen verursacht Fehler. Dies ist die Subnetz-Präfixlänge, nicht die Subnetzmaske. Wie im Bild oben gezeigt, schreiben viele Benutzer das Subnetzpräfix tatsächlich als Subnetzmaske aus.

Wo ist die IP-Adresse des Xiaomi-Mobiltelefons? Sie können die IP-Adresse auf dem Xiaomi-Mobiltelefon überprüfen, aber die meisten Benutzer wissen nicht, wo sie die IP-Adresse überprüfen können. Als Nächstes finden Sie die grafische Anleitung zum Überprüfen der IP-Adresse des Xiaomi-Mobiltelefons Telefon von der Redaktion mitgebracht. Interessierte User kommen vorbei! Wo ist die IP-Adresse des Xiaomi-Mobiltelefons? 1. Öffnen Sie zunächst die Einstellungsfunktion im Xiaomi-Mobiltelefon, wählen Sie „Mein Gerät“ und klicken Sie auf „Alle Parameter“. . Schieben Sie dann auf der Seite „Alle Parameter“ nach unten und wählen Sie „Statusinformationen“. 4. Schließlich können Sie die IP-Adresse in der Statusinformationsoberfläche sehen.

Xianyu ist eine sehr praktische Second-Hand-Handelsplattform. Hier können wir viele verschiedene Produkte kaufen und unsere eigenen unbenutzten Artikel verkaufen. Schauen wir uns das unten mit dem Herausgeber an! Teilen Sie mit, wie Sie die Xianyu-IP-Adresse ändern. Öffnen Sie zunächst die Xianyu-Software. Klicken Sie auf „Adresse“, um den Fischmarkt, die Empfehlungen und die Adresse anzuzeigen. 2. Dann klicken wir auf der Adressenseite auf den [Abwärtspfeil] neben der Adresse. 3. Nach dem letzten Klick klicken wir auf der Stadtauswahlseite;

Benutzer teilen ihr Leben, zeigen ihre Talente und interagieren über Douyin mit Internetnutzern im ganzen Land und sogar auf der ganzen Welt. Einige Benutzer möchten ihre IP-Adressen auf Douyin aus Gründen wie Datenschutz oder geografischen Einschränkungen ändern. Wie ändert also die Douyin-IP-Adresse ihren Standort? 1. Wie ändere ich den Standort der Douyin-IP-Adresse? Ein Proxyserver ist ein Vermittlungsdienst, der dazu dient, Benutzeranfragen an das Internet weiterzuleiten und Antworten zurückzugeben. Durch die Konfiguration eines Proxyservers können Benutzer ihre echten IP-Adressen verbergen und ihre IP-Adressen ändern. Dieser Ansatz trägt zum Schutz der Privatsphäre der Benutzer bei und verbessert die Netzwerksicherheit. Proxyserver können auch verwendet werden, um auf eingeschränkte Inhalte zuzugreifen oder Geolokalisierungsbeschränkungen zu umgehen. Im Allgemeinen ist die Verwendung eines Proxyservers ein praktisches Netzwerktool, mit dem Benutzer sicherer und freier im Internet surfen können.

Springboot liest die Datei, kann aber nach dem Packen in ein JAR-Paket nicht auf die neueste Entwicklung zugreifen. Es gibt eine Situation, in der Springboot die Datei nach dem Packen in ein JAR-Paket nicht lesen kann ist ungültig und kann nur über den Stream gelesen werden. Die Datei befindet sich unter resources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

Mit der rasanten Entwicklung des Internets sind IP-Adressen zu einem unverzichtbaren Bestandteil der Netzwerkkommunikation geworden. IP-Adressinformationen sind für die Überwachung der Netzwerksicherheit, das Verkehrsmanagement und gezielte E-Commerce-Werbung sehr wichtig. Um Benutzern die Abfrage von IP-Adress-/Domänennameninformationen zu erleichtern, bieten viele Websites daher IP-Adressabfragefunktionen an. In diesem Artikel wird als Referenz für die Leser erläutert, wie PHP zum Implementieren der IP-Adressabfragefunktion verwendet wird. 1. Was ist eine IP-Adresse? Die IP-Adresse (InternetProtocolAddress) ist das Netzwerkprotokoll

IP-Adresse für Bitcoin-Transaktionen Die IP-Adresse für Bitcoin-Transaktionen ist ein unverzichtbarer und wichtiger Bestandteil des Bitcoin-Transaktionssystems. Es ist der Kern der Bitcoin-Handelsplattform, über die Bitcoin-Händler Bitcoin-Transaktionen durchführen können. Die Bitcoin-Transaktions-IP-Adresse ist die Grundlage des Bitcoin-Transaktionssystems und die Grundlage, auf der Bitcoin-Händler Bitcoin-Transaktionen durchführen können. Die Bitcoin-Handels-IP-Adresse ist eine globale Netzwerkadresse, die zur Lokalisierung der Server und Geräte der Händler des Bitcoin-Handelssystems verwendet wird. Durch Abfrage der IP-Adresse der Bitcoin-Transaktion können Sie den Transaktionsstatus und zugehörige Informationen abrufen. Darüber hinaus können IP-Adressen für den Bitcoin-Handel auch dazu verwendet werden, Kunden mit dem Bitcoin-Handelssystem und den Geräten der Händler zu verbinden. Sind IP-Adressen für Bitcoin-Transaktionen öffentlich? IP-Adressen für Bitcoin-Transaktionen werden nicht veröffentlicht
