Browse Source

获取用户机器真实IP

huangct 8 years ago
parent
commit
0209d001bb

+ 21 - 6
donate-service/src/main/java/com/uas/service/donate/controller/WxpayController.java

@@ -22,10 +22,7 @@ import com.uas.service.donate.service.ProjectRecodeService;
 import com.uas.service.donate.service.ProjectService;
 import com.uas.service.donate.service.UserService;
 import com.uas.service.donate.service.WechatOrderService;
-import com.uas.service.donate.util.IpUtils;
-import com.uas.service.donate.util.StringUtils;
-import com.uas.service.donate.util.WechatConnector;
-import com.uas.service.donate.util.WxCheckoutUtil;
+import com.uas.service.donate.util.*;
 import org.apache.commons.io.IOUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -538,9 +535,13 @@ public class WxpayController {
         if ("0:0:0:0:0:0:0:1".equals(spbillCreateIp)) {
             spbillCreateIp = "127.0.0.1";
         }
-        wxPayUnifiedOrderRequest.setSpbillCreateIp(spbillCreateIp);//是 APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
+        logger.info("获取用户机器IP,方式一:IpUtils.getIpFromRequest(request)=" + spbillCreateIp);
+        logger.info("获取用户机器IP,方式二:getIp(request)=" + getIp(request));
+        logger.info("获取用户机器IP,方式三:getRealIp(request)=" + getRealIp(request));
+        logger.info("获取用户机器IP,方式四:AgentUtils.getIp(request)=" + AgentUtils.getIp(request));
+        //wxPayUnifiedOrderRequest.setSpbillCreateIp(spbillCreateIp);//是 APP和网页支付提交用户端ip,Native支付填调用微信支付API的机器IP
         //wxPayUnifiedOrderRequest.setSpbillCreateIp(getIp(request));
-        //wxPayUnifiedOrderRequest.setSpbillCreateIp("10.10.100.200");
+        wxPayUnifiedOrderRequest.setSpbillCreateIp(AgentUtils.getIp(request));
 
         //wxPayUnifiedOrderRequest.setTimeStart(null);//否 订单生成时间,格式为yyyyMMddHHmmss,如2009年12月25日9点10分10秒表示为20091225091010。
         //wxPayUnifiedOrderRequest.setTimeExpire(null);//否 订单失效时间,格式为yyyyMMddHHmmss,如2009年12月27日9点10分10秒表示为20091227091010。
@@ -608,4 +609,18 @@ public class WxpayController {
         }
         return request.getRemoteAddr();
     }
+
+    public String getRealIp(HttpServletRequest request) {
+        String ip = request.getHeader("x-forwarded-for");
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
 }

+ 42 - 0
donate-service/src/main/java/com/uas/service/donate/util/AgentUtils.java

@@ -0,0 +1,42 @@
+package com.uas.service.donate.util;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class AgentUtils {
+
+	/**
+	 * 获取客户端IP
+	 * 
+	 * @param request
+	 * @return
+	 */
+	public static String getIp(HttpServletRequest request) {
+		String ipAddress = null;
+		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.getRemoteAddr();
+		}
+		// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+		if (ipAddress != null && ipAddress.length() > 15) {
+			if (ipAddress.indexOf(",") > 0) {
+				ipAddress = ipAddress.substring(0, ipAddress.indexOf(","));
+			}
+		}
+		// window7系统下,用localhost访问时,ip会变成0:0:0:0:0:0:0:1
+		if (ipAddress != null && "0:0:0:0:0:0:0:1".equals(ipAddress)) {
+			ipAddress = "127.0.0.1";
+		}
+		return ipAddress;
+	}
+
+	public static String getHost(HttpServletRequest request) {
+		String url = request.getRequestURL().toString();
+		return url.substring(0, url.length() - request.getRequestURI().length()) + request.getContextPath() + "/";
+	}
+}