Browse Source

优化获取下单IP

lighter 1 year ago
parent
commit
ed57b9c107

+ 2 - 1
src/main/java/thyyxxk/wxservice_server/controller/WxApiController.java

@@ -11,6 +11,7 @@ import thyyxxk.wxservice_server.entity.wxapi.*;
 import thyyxxk.wxservice_server.service.WxRefundService;
 import thyyxxk.wxservice_server.service.PushWxMessageService;
 import thyyxxk.wxservice_server.service.WxApiService;
+import thyyxxk.wxservice_server.utils.IpAddressUtil;
 import thyyxxk.wxservice_server.utils.PropertiesUtil;
 import thyyxxk.wxservice_server.utils.ResultVoUtil;
 
@@ -50,7 +51,7 @@ public class WxApiController {
 
     @PostMapping("/createPayOrder")
     public ResultVo<WxPayOrder> createPayOrder(HttpServletRequest request, @RequestBody WxPayOrder order) {
-        order.setSpbillCreateIp(request.getRemoteHost());
+        order.setSpbillCreateIp(IpAddressUtil.getIPAddress(request));
         return service.createPayOrder(order);
     }
 

+ 0 - 1
src/main/java/thyyxxk/wxservice_server/service/PayMzFeeService.java

@@ -78,7 +78,6 @@ public class PayMzFeeService {
             return ResultVoUtil.fail(ExceptionEnum.CONTINUE_NEXT_STEP);
         }
         return ResultVoUtil.success(mdtrtId);
-
     }
 
     public ResultVo<MedinsPresettle> getUnsettledMedinsTrade(String mdtrtId) {

+ 36 - 0
src/main/java/thyyxxk/wxservice_server/utils/IpAddressUtil.java

@@ -0,0 +1,36 @@
+package thyyxxk.wxservice_server.utils;
+
+import javax.servlet.http.HttpServletRequest;
+
+public class IpAddressUtil {
+    public static String getIPAddress(HttpServletRequest request) {
+        String ip = null;
+        //X-Forwarded-For:Squid 服务代理
+        String ipAddresses = request.getHeader("X-Forwarded-For");
+        if (ipAddresses == null || ipAddresses.isEmpty() || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //Proxy-Client-IP:apache 服务代理
+            ipAddresses = request.getHeader("Proxy-Client-IP");
+        }
+        if (ipAddresses == null || ipAddresses.isEmpty() || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //WL-Proxy-Client-IP:weblogic 服务代理
+            ipAddresses = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ipAddresses == null || ipAddresses.isEmpty() || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //HTTP_CLIENT_IP:有些代理服务器
+            ipAddresses = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ipAddresses == null || ipAddresses.isEmpty() || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //X-Real-IP:nginx服务代理
+            ipAddresses = request.getHeader("X-Real-IP");
+        }
+        //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP
+        if (ipAddresses != null && !ipAddresses.isEmpty()) {
+            ip = ipAddresses.split(",")[0];
+        }
+        //还是不能获取到,最后再通过request.getRemoteAddr();获取
+        if (ip == null || ip.isEmpty() || "unknown".equalsIgnoreCase(ipAddresses)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
+}