获取用户真实IP地址

/**

     * 获取用户真实IP地址

     * @param request

     * @return

     */

    public static String getIpAddress(HttpServletRequest request) {

        String ipAddress = request.getHeader("x-forwarded-for");

        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {

            ipAddress = request.getHeader("Proxy-Client-IP");

        }

        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {

            ipAddress = request.getHeader("WL-Proxy-Client-IP");

        }

        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {

            ipAddress = request.getHeader("HTTP_CLIENT_IP");

        }

        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {

            ipAddress = request.getHeader("HTTP_X_FORWARDED_FOR");

        }

        if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) {

            ipAddress = request.getRemoteAddr();

            if (ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {

                // 根据网卡取本机配置的IP

                InetAddress inet = null;

                try {

                    inet = InetAddress.getLocalHost();

                } catch (UnknownHostException e) {

                    logger.error(Logger.EVENT_FAILURE, "获取用户真实IP地址失败!", e);

                }

                ipAddress = inet.getHostAddress();

            }

        }

        // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割

        if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length() = 15

            if (ipAddress.indexOf(",") > 0) {

                ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));

            }

        }

        return ipAddress;

    }

猜你喜欢

转载自blog.csdn.net/qq_25927437/article/details/83182548