Inhaltsverzeichnis
Einführung:
Entwicklung:
Online-Analyse:
Szenario:
Heim Java javaLernprogramm Wie Spring Boot die IP-Adressauflösung schnell implementiert

Wie Spring Boot die IP-Adressauflösung schnell implementiert

May 10, 2023 pm 03:04 PM
ip地址 springboot

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>
Nach dem Login kopieren

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;
    }
Nach dem Login kopieren

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();
    }
}
Nach dem Login kopieren

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) {

    }
}
Nach dem Login kopieren
如果想要执行我们的ip 解析拦截器,需要在spring boot的视图层进行拦截才会触发我们的拦截器。
Nach dem Login kopieren
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    IpUrlLimitInterceptor ipUrlLimitInterceptor;
	
	    //执行ip拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(ipUrlLimitInterceptor)
                // 拦截所有请求
                .addPathPatterns("/**");
    }
}
Nach dem Login kopieren
通过这样的一套流程下来,我们就能实现对每一个请求进行ip 获取、ip解析,为每个请求带上具体ip地址的小尾巴。
Nach dem Login kopieren

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!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie kann man Xiaohongshu so einstellen, dass die IP-Adresse nicht angezeigt wird? Wie ändert es die ID, um die Stadt zu lokalisieren? Wie kann man Xiaohongshu so einstellen, dass die IP-Adresse nicht angezeigt wird? Wie ändert es die ID, um die Stadt zu lokalisieren? Mar 27, 2024 pm 03:00 PM

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

So lösen Sie das Problem, dass die IP-Adresse von Windows 10 nach dem Festlegen nicht gespeichert werden kann So lösen Sie das Problem, dass die IP-Adresse von Windows 10 nach dem Festlegen nicht gespeichert werden kann Jul 08, 2023 pm 12:33 PM

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-Handys? Wo ist die IP-Adresse des Xiaomi-Handys? Feb 29, 2024 pm 06:10 PM

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.

Wo kann man die IP-Adresse von Xianyu ändern_Teilen Sie, wie Sie die IP-Adresse von Xianyu ändern können Wo kann man die IP-Adresse von Xianyu ändern_Teilen Sie, wie Sie die IP-Adresse von Xianyu ändern können Mar 20, 2024 pm 05:06 PM

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;

Wie ändere ich den Standort der Douyin-IP-Adresse? Warum ändert sich der Standort der IP-Adresse? Wie ändere ich den Standort der Douyin-IP-Adresse? Warum ändert sich der Standort der IP-Adresse? Mar 21, 2024 pm 06:30 PM

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.

So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann So lösen Sie das Problem, dass Springboot nach dem Einlesen in ein JAR-Paket nicht auf die Datei zugreifen kann Jun 03, 2023 pm 04:38 PM

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

PHP implementiert die IP-Adressabfragefunktion PHP implementiert die IP-Adressabfragefunktion Jun 22, 2023 pm 11:22 PM

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 der Bitcoin-Transaktion (Ist die IP-Adresse der Bitcoin-Transaktion öffentlich?) IP-Adresse der Bitcoin-Transaktion (Ist die IP-Adresse der Bitcoin-Transaktion öffentlich?) Feb 06, 2024 am 10:03 AM

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

See all articles