自定义类库:java根据HttpServletRequest请求获取ip地址

一、在web站点中可以根据HttpServletRequest对象获取真实的客户机ip

package com.moy.whymoy.test.utils;

import javax.servlet.http.HttpServletRequest;
import java.util.Objects;

/**
 * [Project]:whymoy  <br/>
 * [Email]:moy25@foxmail.com  <br/>
 * [Date]:2018/3/28  <br/>
 * [Description]:  <br/>
 *
 * @author YeXiangYang
 */
public abstract class IpUtils {

    /**
     * 获取ip地址
     *
     * @param request 请求
     * @return 返回ip字符串
     */
    public static String getIpAddress(HttpServletRequest request) {
        if (Objects.isNull(request)) {
            return "unknown";
        }
        String ip = request.getHeader("x-forwarded-for");

        if (nonValidIp(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (nonValidIp(ip)) {
            ip = request.getHeader("X-Forwarded-For");
        }
        if (nonValidIp(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (nonValidIp(ip)) {
            ip = request.getHeader("X-Real-IP");
        }
        if (nonValidIp(ip)) {
            ip = request.getRemoteAddr();
        }

        return ip;
    }


    /**
     * 是无效的ip地址
     *
     * @param ip ip字符串
     * @return 无效的ip地址返回<tt>true</tt>
     */
    public static boolean nonValidIp(String ip) {
        return ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip);
    }


    /**
     * 是有效的ip地址
     *
     * @param ip ip字符串
     * @return 有效的ip地址返回<tt>true</tt>
     */
    public static boolean isValidIp(String ip) {
        return !nonValidIp(ip);
    }
}

 

yexiangyang

moyyexy@gmail.com


 

posted @ 2018-03-28 10:26  墨阳  阅读(409)  评论(0编辑  收藏  举报