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>