您现在的位置是:网站首页> 编程开发> java 编程开发

java中通过ip获取地址

bean2021-11-11java 328人已围观

简介获取IP地址 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 <dependency>    &nbsp

java中通过ip获取地址

最后更新:2022-05-29 02:21:17

推荐指数


获取IP地址
使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>${hutool.version}</version>
</dependency>
package com.cloud.www.util;

import cn.hutool.core.convert.Convert;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpUtil;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.cloud.www.model.domain.IpProvinceDomain;

import javax.servlet.http.HttpServletRequest;

public class IpUtils {
    /**
     * 获取IP地址
     * <p>
     * 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址
     * 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址,X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址
     */
    public String getIpAddr(HttpServletRequest request) {
        String ip = null;
        try {
            ip = request.getHeader("x-forwarded-for");
            if (StrUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("Proxy-Client-IP");
            }
            if (StrUtil.isEmpty(ip) || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("WL-Proxy-Client-IP");
            }
            if (StrUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_CLIENT_IP");
            }
            if (StrUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
            }
            if (StrUtil.isEmpty(ip) || "unknown".equalsIgnoreCase(ip)) {
                ip = request.getRemoteAddr();
            }
            if (StrUtil.isNotEmpty(ip) && ip.contains("0:0:0")) {
                return "";
            }
        } catch (Exception e) {
        }

        return ip;
    }

    //获取省市县及网络
    public IpProvinceDomain getProvince(String ip) {
        if (StrUtil.isEmpty(ip)) {
            return null;
        }
        if (ip.equals("127.0.0.1")) {
            return null;
        }
        String url = "http://api.map.baidu.com/location/ip?ak=NlEIUMs5xPxRaiCn9ayyNp9rxXZLZmdH&ip=" + ip;
        String s = HttpUtil.get(url);
        JSONObject jsonObject = JSONUtil.parseObj(s);
        if (jsonObject == null || jsonObject.get("address") == null || StrUtil.isEmpty(Convert.toStr(jsonObject.get("address")))) {
            return null;
        }
        String address = Convert.toStr(jsonObject.get("address"));
//        String[] arrProvince = StrUtil.split(address, "\\|");
        String[] arrProvince = address.split("\\|");
        IpProvinceDomain ipProvinceDomain = new IpProvinceDomain();
        ipProvinceDomain.setCountry(arrProvince[0]);
        ipProvinceDomain.setProvinceName(arrProvince[1]);
        ipProvinceDomain.setCity(arrProvince[2]);

        return ipProvinceDomain;
    }
}

//开始调用
()
(request,
              response) {
    =IpUtils();
    ipAddr = .getIpAddr(request);
    (.(ipAddr)){
        ipAddr=;
    }
    = .getProvince(ipAddr);

    R();
}


很赞哦! (0)

文章评论

来说两句吧...

验证码: