Explorar el Código

获取ip工具类

shuzheng hace 9 años
padre
commit
7331751e26

+ 27 - 2
zheng-common/src/main/java/com/zheng/common/util/RequestUtil.java

@@ -37,7 +37,7 @@ public class RequestUtil {
 	 * @param request
 	 * @return
 	 */
-	public String getBasePath(HttpServletRequest request) {
+	public static String getBasePath(HttpServletRequest request) {
 		StringBuffer basePath = new StringBuffer();
 		String scheme = request.getScheme();
 		String domain = request.getServerName();
@@ -52,5 +52,30 @@ public class RequestUtil {
 		}
 		return basePath.toString();
 	}
-	
+
+	/**
+	 * 获取ip工具类,除了getRemoteAddr,其他ip均可伪造
+	 * @param request
+	 * @return
+	 */
+	public static String getIpAddr(HttpServletRequest request) {
+		String ip = request.getHeader("Cdn-Src-Ip");    // 网宿cdn的真实ip
+		if (ip == null || ip.length() == 0 || " unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("HTTP_CLIENT_IP");   // 蓝讯cdn的真实ip
+		}
+		if (ip == null || ip.length() == 0 || " unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("X-Forwarded-For");  // 获取代理ip
+		}
+		if (ip == null || ip.length() == 0 || " unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("Proxy-Client-IP"); // 获取代理ip
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getHeader("WL-Proxy-Client-IP"); // 获取代理ip
+		}
+		if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+			ip = request.getRemoteAddr(); // 获取真实ip
+		}
+		return ip;
+	}
+
 }