获取ip地址类

import java.util.Objects;

import javax.servlet.http.HttpServletRequest;

/**
 * 获取ip地址类
 * @author zql
 * @createTime 2020-12-01 00:00:42
 * @version 1.1
 * @modifyLog 1.1 优化代码
 *
 */
public class IpAddress {
	
	/**
	 * 屏蔽构造函数,避免被实例化
	 */
	private IpAddress() {}
	
	public static String getIpAddress(HttpServletRequest request) {
		String ipAddr = null;
		String ignore = "unknown";
		// 代理进来,则透过防火墙获取真实IP地址
	    final String[] HEADERS_TO_TRY = { 
            "X-Forwarded-For",
            "Proxy-Client-IP",
            "WL-Proxy-Client-IP",
            "HTTP_X_FORWARDED_FOR",
            "HTTP_X_FORWARDED",
            "HTTP_X_CLUSTER_CLIENT_IP",
            "HTTP_CLIENT_IP",
            "HTTP_FORWARDED_FOR",
            "HTTP_FORWARDED",
            "HTTP_VIA",
            "REMOTE_ADDR",
            "X-Real-IP"};
		for (String header : HEADERS_TO_TRY) {
			String ip = request.getHeader(header);
			if (IpAddress.isNotEmpty(ip) && !ignore.equalsIgnoreCase(ip)) {
				ipAddr = ip;
				break;
			}
		}
		// 如果没有代理,则获取真实ip
		if (IpAddress.isEmpty(ipAddr) || ignore.equalsIgnoreCase(ipAddr)) {
			ipAddr = request.getRemoteAddr();
		}
		ipAddr = ipAddr.equals("0:0:0:0:0:0:0:1") ? "127.0.0.1" : ipAddr;
		return ipAddr;
	}
	
	private static boolean isEmpty(String str) {
        return Objects.isNull(str) || str.length() == 0;
    }
	
	private static boolean isNotEmpty(String str) {
		return !IpAddress.isEmpty(str);
	}
	
	/**
	 * 隐藏ip地址
	 * @author zql
	 * @createTime 2020-12-01 00:01:31
	 *
	 * @param ipAddress
	 * @return
	 */
	public static String hideIpAddress(String ipAddress) {
		String ip = ipAddress;
		// 注意点号分割要用转义字符
		String[] ips = ipAddress.split("\\.");
		if (ips.length == 4) {
			ip = ips[0] + "." + ips[1] + ".*.*";
		}
		return ip;
	}

}


普通项目需要引入的包
servlet-api-2.5.jar

maven项目依赖

<dependency>  
    <groupId>javax.servlet</groupId>  
    <artifactId>servlet-api</artifactId>  
    <version>2.5</version>
    <scope>provided</scope>  
</dependency>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值