Table des matières
Introduction : 
Développement :
Analyse en ligne :
Scénario :
Maison Java javaDidacticiel Comment Spring Boot implémente rapidement la résolution d'adresse IP

Comment Spring Boot implémente rapidement la résolution d'adresse IP

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

Introduction : 

Si vous utilisez la résolution IP locale, nous utiliserons ip2region. Ce projet maintient une table de correspondance d'adresses IP locales plus détaillée. Si vous souhaitez l'utiliser dans un environnement hors ligne, vous devez importer les dépendances du projet et spécifier les. version. Les méthodes peuvent différer selon les versions.

<!--    ip库-->
<dependency>
	<groupId>org.lionsoul</groupId>
	<artifactId>ip2region</artifactId>
	<version>2.6.3</version>
        </dependency>
Copier après la connexion

Développement :

Vous devez télécharger le fichier xdb dans le répertoire du fichier du projet lorsque vous l'utilisez. Même si vous utilisez ip2region pour interroger entièrement sur la base du fichier xdb, le temps de réponse d'une seule requête est au niveau de dix. microsecondes. Il peut être ouvert des deux manières suivantes. Requête accélérée par la mémoire :

  • Cache d'index vIndex : utilisez un espace mémoire fixe de 512 Ko pour mettre en cache les données d'index vectoriel, réduire une opération de disque IO et maintenir l'efficacité moyenne des requêtes stable entre les deux. 10-20 microsecondes.

  • Cache de fichiers xdb complet : chargez l'intégralité du fichier xdb en mémoire. L'empreinte mémoire est égale à la taille du fichier xdb. Aucune opération d'E/S sur disque n'est requise, maintenant l'efficacité des requêtes au niveau de la microseconde.

/**
 * 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;
    }
Copier après la connexion

Ici, nous encapsulons la résolution IP dans une classe d'outils, comprenant deux méthodes pour obtenir la résolution IP et l'adresse IP. La résolution IP peut être obtenue dans la requête. Après avoir obtenu l'IP, vous devez trouver la résolution de l'adresse IP correspondante dans xdb en fonction de l'IP. Étant donné que la base de données locale peut présenter certaines lacunes, certaines IP ne peuvent pas être résolues.

Analyse en ligne :

Si vous souhaitez obtenir des informations d'adresse IP plus complètes, vous pouvez utiliser la base de données en ligne. Ce qui est fourni ici est l'analyse IP de whois.pconline.com. Cette analyse IP s'est effectuée de manière très fluide lors de mon utilisation, et Seules quelques adresses IP ne peuvent pas être résolues.

@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();
    }
}
Copier après la connexion

Scénario :

Alors, dans quel processus de développement est-il plus approprié d'obtenir l'adresse IP qui sera utilisée ici ? Interceptez chaque demande entrant dans le service, effectuez une pré-opération et terminez l'analyse de l'en-tête de la demande, l'acquisition IP et la résolution de l'adresse IP lors de la saisie, afin que l'adresse IP et d'autres informations puissent être réutilisées dans l'ensemble du processus ultérieur.

/**
 * 对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) {

    }
}
Copier après la connexion
如果想要执行我们的ip 解析拦截器,需要在spring boot的视图层进行拦截才会触发我们的拦截器。
Copier après la connexion
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Autowired
    IpUrlLimitInterceptor ipUrlLimitInterceptor;
	
	    //执行ip拦截器
    @Override
    public void addInterceptors(InterceptorRegistry registry){
        registry.addInterceptor(ipUrlLimitInterceptor)
                // 拦截所有请求
                .addPathPatterns("/**");
    }
}
Copier après la connexion
rrree

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Vous avez un jeu croisé?
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment configurer Xiaohongshu pour qu'il n'affiche pas l'adresse IP ? Comment change-t-il l'identifiant pour localiser la ville ? Comment configurer Xiaohongshu pour qu'il n'affiche pas l'adresse IP ? Comment change-t-il l'identifiant pour localiser la ville ? Mar 27, 2024 pm 03:00 PM

Xiaohongshu est une plateforme sociale de commerce électronique populaire où les utilisateurs peuvent partager leur vie quotidienne et découvrir leurs produits préférés. Certains utilisateurs sont plus sensibles à la vie privée et espèrent que leur adresse IP ne sera pas affichée sur Xiaohongshu pour protéger leur vie privée en ligne. Alors, comment configurer Xiaohongshu pour qu'il n'affiche pas l'adresse IP ? Cet article répondra à cette question en détail. 1. Comment configurer Xiaohongshu pour qu'il n'affiche pas l'adresse IP ? 1. Modifiez les paramètres de Xiaohongshu : ouvrez l'application Xiaohongshu, cliquez sur « Moi » dans le coin inférieur droit pour accéder au centre personnel. Cliquez ensuite sur l'avatar pour accéder aux paramètres du compte. Dans les paramètres du compte, recherchez « Paramètres de confidentialité » et cliquez pour entrer. Ici, vous pouvez trouver les options de configuration de l’adresse IP, désactivez-la simplement. 2. Vider le cache : Parfois, Xiaohongshu peut afficher une erreur

Comment résoudre le problème selon lequel l'adresse IP de Windows 10 ne peut pas être enregistrée après l'avoir définie Comment résoudre le problème selon lequel l'adresse IP de Windows 10 ne peut pas être enregistrée après l'avoir définie Jul 08, 2023 pm 12:33 PM

Parfois, tout le monde est confronté au besoin de modifier manuellement l'adresse IP, mais certains clients Windows 10 signalent que l'adresse IP ne peut pas être enregistrée après l'avoir définie. Comment résoudre cette situation ? L'adresse IP est stockée essentiellement parce qu'il y a une erreur lors du remplissage de votre adresse IP. Vous pouvez vérifier si le préfixe de sous-réseau a été écrit avec le masque de sous-réseau. Si tel est le cas, modifiez-le. Après la modification, vous pouvez l'enregistrer normalement. Adresse IP. Comment résoudre le problème selon lequel l'adresse IP de Windows 10 ne peut pas être enregistrée une fois définie : L'image d'erreur est la suivante : L'invite "Impossible d'enregistrer les paramètres IP, veuillez vérifier un ou plusieurs paramètres et essayer" provoquée par le remplissage du champ erreur. Il s'agit de la longueur du préfixe de sous-réseau, pas du masque de sous-réseau, comme indiqué sur l'image. Comme le montre l'image ci-dessus, de nombreux utilisateurs écrivent le préfixe de sous-réseau comme masque de sous-réseau.

Où est l'adresse IP du téléphone mobile Xiaomi ? Où est l'adresse IP du téléphone mobile Xiaomi ? Feb 29, 2024 pm 06:10 PM

Où se trouve l'adresse IP du téléphone mobile Xiaomi ? Vous pouvez vérifier l'adresse IP sur le téléphone mobile Xiaomi, mais la plupart des utilisateurs ne savent pas où vérifier l'adresse IP. Voici ensuite le didacticiel graphique sur la façon de vérifier l'adresse IP du mobile Xiaomi. téléphone apporté par l'éditeur. Les utilisateurs intéressés viennent y jeter un œil ! Où se trouve l'adresse IP du téléphone mobile Xiaomi ? 1. Ouvrez d'abord la fonction de paramètres du téléphone mobile Xiaomi, sélectionnez [Mon appareil] et cliquez pour entrer ; 2. Ensuite, sur la page de fonction Mon appareil, cliquez sur le service [Tous les paramètres] ; . Ensuite, sur la page Tous les paramètres, faites glisser vers le bas et sélectionnez [Informations sur l'état] 4. Enfin, vous pouvez voir l'adresse IP dans l'interface d'informations sur l'état.

Où changer l'adresse IP de Xianyu_Share comment changer l'adresse IP de Xianyu Où changer l'adresse IP de Xianyu_Share comment changer l'adresse IP de Xianyu Mar 20, 2024 pm 05:06 PM

Xianyu est une plateforme de commerce d'occasion très pratique. Ici, nous pouvons acheter de nombreux produits différents et vendre nos propres articles inutilisés. Et si nous souhaitons modifier notre adresse ? Jetons un coup d'œil avec l'éditeur ci-dessous ! Partagez comment modifier l'adresse IP de Xianyu. Tout d'abord, ouvrez le logiciel Xianyu. Après être entré sur la page d'accueil, vous pouvez voir le marché des fruits de mer, les recommandations, l'adresse et d'autres options dans le coin supérieur gauche. 2. Ensuite sur la page d'adresse, nous cliquons sur la [Flèche vers le bas] à côté de l'adresse ; 3. Après le dernier clic, nous cliquons sur la ville sur la page de sélection de ville ;

Comment changer l'emplacement de l'adresse IP de Douyin ? Pourquoi l'adresse IP change-t-elle d'emplacement ? Comment changer l'emplacement de l'adresse IP de Douyin ? Pourquoi l'adresse IP change-t-elle d'emplacement ? Mar 21, 2024 pm 06:30 PM

Les utilisateurs partagent leur vie, montrent leurs talents et interagissent avec des internautes à travers le pays et même dans le monde via Douyin. Certains utilisateurs souhaitent modifier leur adresse IP sur Douyin pour des raisons telles que la protection de la vie privée ou des restrictions géographiques. Alors, comment l’adresse IP Douyin change-t-elle d’emplacement ? 1. Comment changer l'emplacement de l'adresse IP de Douyin ? Un serveur proxy est un service intermédiaire utilisé pour transmettre les demandes des utilisateurs vers Internet et renvoyer des réponses. En configurant un serveur proxy, les utilisateurs peuvent masquer leurs véritables adresses IP et modifier leurs adresses IP. Cette approche contribue à protéger la confidentialité des utilisateurs et à améliorer la sécurité du réseau. Les serveurs proxy peuvent également être utilisés pour accéder à du contenu restreint ou contourner les restrictions de géolocalisation. Dans l’ensemble, l’utilisation d’un serveur proxy est un outil réseau pratique qui peut aider les utilisateurs à naviguer sur Internet de manière plus sûre et plus libre.

Comment résoudre le problème selon lequel Springboot ne peut pas accéder au fichier après l'avoir lu dans un package jar Comment résoudre le problème selon lequel Springboot ne peut pas accéder au fichier après l'avoir lu dans un package jar Jun 03, 2023 pm 04:38 PM

Springboot lit le fichier, mais ne peut pas accéder au dernier développement après l'avoir empaqueté dans un package jar. Il existe une situation dans laquelle Springboot ne peut pas lire le fichier après l'avoir empaqueté dans un package jar. La raison en est qu'après l'empaquetage, le chemin virtuel du fichier. n’est pas valide et n’est accessible que via le flux Read. Le fichier se trouve sous les ressources publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

PHP implémente la fonction de requête d'adresse IP PHP implémente la fonction de requête d'adresse IP Jun 22, 2023 pm 11:22 PM

Avec le développement rapide d'Internet, les adresses IP sont devenues un élément indispensable des communications réseau. Les informations sur l'adresse IP sont très importantes pour la surveillance de la sécurité du réseau, la gestion du trafic et la publicité ciblée sur le commerce électronique. Par conséquent, afin de permettre aux utilisateurs d'interroger plus facilement les informations sur l'adresse IP/le nom de domaine, de nombreux sites Web proposent des fonctions de requête d'adresse IP. Cet article présentera comment utiliser PHP pour implémenter la fonction de requête d'adresse IP pour référence des lecteurs. 1. Qu'est-ce qu'une adresse IP ? L'adresse IP (InternetProtocolAddress) est le protocole réseau

Adresse IP de la transaction Bitcoin (l'adresse IP de la transaction Bitcoin est-elle publique ?) Adresse IP de la transaction Bitcoin (l'adresse IP de la transaction Bitcoin est-elle publique ?) Feb 06, 2024 am 10:03 AM

Adresse IP de transaction Bitcoin L'adresse IP de transaction Bitcoin est un composant indispensable et important du système de transaction Bitcoin. Il s’agit du cœur de la plateforme de trading Bitcoin grâce à laquelle les traders Bitcoin peuvent effectuer des transactions Bitcoin. L’adresse IP de transaction Bitcoin constitue la base du système de transaction Bitcoin et la base sur laquelle les traders Bitcoin peuvent effectuer des transactions Bitcoin. L’adresse IP de trading Bitcoin est une adresse réseau mondiale utilisée pour localiser les serveurs du système de trading Bitcoin et les appareils des traders. En interrogeant l'adresse IP de la transaction Bitcoin, vous pouvez obtenir l'état de la transaction et les informations associées. De plus, les adresses IP de trading Bitcoin peuvent également être utilisées pour connecter les clients au système de trading Bitcoin et aux appareils des traders. Les adresses IP des transactions Bitcoin sont-elles publiques ? Les adresses IP des transactions Bitcoin ne seront pas rendues publiques

See all articles