All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.kangyonggan.app.util.IpUtil Maven / Gradle / Ivy

The newest version!
package com.kangyonggan.app.util;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

import javax.servlet.http.HttpServletRequest;

/**
 * IP工具类
 *
 * @author kangyonggan
 * @since 5/4/18
 */
public final class IpUtil {

    /**
     * unknown
     */
    private static final String UNKNOWN = "unknown";

    /**
     * 获取IP信息的url
     */
    private static final String URL_GET_IP_INFO = "http://ip.taobao.com/service/getIpInfo.php";

    /**
     * 获取IP信息成功响应码
     */
    private static final String CODE_SUCCESS = "0";

    /**
     * 私有构造, 任何时候都不能实例化
     */
    private IpUtil() {

    }

    /**
     * 获取请求IP
     *
     * @param request Http请求
     * @return 返回请求IP
     */
    public static String getIp(HttpServletRequest request) {
        String ip = request.getHeader("X-Real-IP");
        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.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }

    /**
     * 获取IP信息
     *
     * @param ip IP地址
     * @return 返回IP信息
     */
    public static IpInfo getIpInfo(String ip) {
        IpInfo ipInfo = new IpInfo();
        ipInfo.setIp(ip);
        Class clazz = ipInfo.getClass();
        try {
            String result = HttpUtil.get(URL_GET_IP_INFO, "ip=" + ip);

            JSONObject resultJSON = JSON.parseObject(result);
            String code = resultJSON.getString("code");
            String data = resultJSON.getString("data");

            ipInfo.setRespCo(code);

            if (CODE_SUCCESS.equals(code)) {
                JSONObject dataJSON = JSON.parseObject(data);
                for (String key : dataJSON.keySet()) {
                    String fieldName = StringUtil.underLineToCamel(key);
                    Reflections.setFieldValue(ipInfo, fieldName, dataJSON.getString(key));
                }
            } else {
                ipInfo.setRespMsg(data);
            }
        } catch (Exception e) {
            ipInfo.setRespCo("-1");
            ipInfo.setRespMsg(e.getMessage());
        }
        return ipInfo;
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy