plf преди 5 години
родител
ревизия
52496940ab

+ 2 - 5
pay/src/main/java/com/caimei/module/pay/service/impl/PayServiceImpl.java

@@ -5,11 +5,8 @@ import com.caimei.module.base.entity.bo.JsonModel;
 import com.caimei.module.base.entity.bo.Payment;
 import com.caimei.module.base.entity.vo.*;
 import com.caimei.module.pay.dao.PayDao;
-import com.caimei.module.pay.util.MathUtil;
-import com.caimei.module.pay.util.Md5Util;
-import com.caimei.module.pay.util.PayUtils;
+import com.caimei.module.pay.util.*;
 import com.caimei.module.pay.service.PayService;
-import com.caimei.module.pay.util.RandomCodeGenerator;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
@@ -108,7 +105,7 @@ public class PayServiceImpl implements PayService {
             String orderId = order.getOrderNo() + "#" + time; // 商户订单号
             String product = "采美订单" + order.getOrderNo(); //商品名称
             String userType = "ENTERPRISE";
-            String userIp = request.getRemoteAddr();//用户IP地址
+            String userIp = IPUtil.getIpAddr(request);//用户IP地址
             JSONObject json = new JSONObject();
             json.put("merAccount", merAccount);
             json.put("merNo", merNo);

+ 118 - 0
pay/src/main/java/com/caimei/module/pay/util/IPUtil.java

@@ -0,0 +1,118 @@
+/**
+ * 
+ */
+package com.caimei.module.pay.util;
+
+import org.apache.commons.lang.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Random;
+
+/**
+ * <p>Title: IPUtil</p>
+ * <p>Description: </p>
+ * <p>Company: caimei365</p> 
+ * @author dmeng
+ * @date 2016年9月13日 下午5:20:18
+ */
+public class IPUtil {
+	
+	/**
+	 * 获取访问者IP
+	 * 在一般情况下使用Request.getRemoteAddr()即可,但是经过nginx等反向代理软件后,这个方法会失效。
+	 * 本方法先从Header中获取X-Real-IP,如果不存在再从X-Forwarded-For获得第一个IP(用,分割),
+	 * 如果还不存在则调用Request .getRemoteAddr()。
+	 * @param request
+	 * @return
+	 */
+	public static String getIpAddr(HttpServletRequest request) throws Exception {
+		String ip = request.getHeader("X-Real-IP");
+		if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
+			return ip;
+		}
+		ip = request.getHeader("X-Forwarded-For");
+		if (!StringUtils.isBlank(ip) && !"unknown".equalsIgnoreCase(ip)) {
+			// 多次反向代理后会有多个IP值,第一个为真实IP。
+			int index = ip.indexOf(',');
+			if (index != -1) {
+				return ip.substring(0, index);
+			} else {
+				return ip;
+			}
+		} else {
+			return request.getRemoteAddr();
+		}
+	}
+
+	/***
+	 * 从crm 转移过来
+	 * 2018.5.24
+	 * @param request
+	 * @return
+	 */
+	public static String getRemoteAddr(HttpServletRequest request) {
+		// 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址
+		String ip = request.getHeader("X-Forwarded-For");
+		if (ip == null) {
+			ip = request.getHeader("X-Real-IP");
+			if (ip == null) {
+				ip = request.getRemoteAddr();
+			}
+		}
+		if (ip.length() > 15) {
+			String[] ips = ip.split(",");
+			for (int index = 0; index < ips.length; index++) {
+				String strIp = (String) ips[index];
+				if (!("unknown".equalsIgnoreCase(strIp))) {
+					ip = strIp;
+					break;
+				}
+			}
+		}
+		return ip;
+	}
+
+	/****************************java 随机获取国内IP*********************
+	 参考:http://www.oschina.net/code/snippet_252582_21129
+	 参考:http://bbs.csdn.net/topics/80096108
+	 ******************************************************************/
+	/**
+     * 随机生成国内IP地址
+     */
+	public static String getRandomIp(){
+
+		//ip范围
+		int[][] range = {{607649792,608174079},//36.56.0.0-36.63.255.255
+				{1038614528,1039007743},//61.232.0.0-61.237.255.255
+				{1783627776,1784676351},//106.80.0.0-106.95.255.255
+				{2035023872,2035154943},//121.76.0.0-121.77.255.255
+				{2078801920,2079064063},//123.232.0.0-123.235.255.255
+				{-1950089216,-1948778497},//139.196.0.0-139.215.255.255
+				{-1425539072,-1425014785},//171.8.0.0-171.15.255.255
+				{-1236271104,-1235419137},//182.80.0.0-182.92.255.255
+				{-770113536,-768606209},//210.25.0.0-210.47.255.255
+				{-569376768,-564133889}, //222.16.0.0-222.95.255.255
+		};
+
+		Random rdint = new Random();
+		int index = rdint.nextInt(10);
+		String ip = num2ip(range[index][0]+new Random().nextInt(range[index][1]-range[index][0]));
+		return ip;
+	}
+
+	/*
+         * 将十进制转换成ip地址
+         */
+	public static String num2ip(int ip) {
+		int [] b=new int[4] ;
+		String x = "";
+
+		b[0] = (int)((ip >> 24) & 0xff);
+		b[1] = (int)((ip >> 16) & 0xff);
+		b[2] = (int)((ip >> 8) & 0xff);
+		b[3] = (int)(ip & 0xff);
+		x=Integer.toString(b[0])+"."+Integer.toString(b[1])+"."+Integer.toString(b[2])+"."+Integer.toString(b[3]);
+
+		return x;
+	}
+}