Parcourir la source

1.获取远程IP完善。

tomatozq il y a 5 ans
Parent
commit
cb9e662ecc

+ 2 - 2
picc-admin-server/src/main/java/com/jpsoft/picc/advice/PermissionAdvice.java

@@ -1,6 +1,7 @@
 package com.jpsoft.picc.advice;
 
 import com.jpsoft.picc.modules.common.dto.MessageResult;
+import com.jpsoft.picc.modules.common.utils.HttpUtil;
 import com.jpsoft.picc.modules.sys.entity.SysLog;
 import com.jpsoft.picc.modules.sys.service.PermissionService;
 import com.jpsoft.picc.modules.sys.service.SysLogService;
@@ -82,9 +83,8 @@ public class PermissionAdvice {
 
         if(requestAttrs!=null) {
             HttpServletRequest request = requestAttrs.getRequest();
-            String remoteIP = request.getHeader("remote_addr");
 
-            sysLog.setRemoteIp(remoteIP);
+            sysLog.setRemoteIp(HttpUtil.getIpAddress(request));
             sysLog.setUrl(request.getRequestURI());
 
             log.warn("访问地址:" + request.getRequestURL().toString());

+ 60 - 0
picc-common/src/main/java/com/jpsoft/picc/modules/common/utils/HttpUtil.java

@@ -0,0 +1,60 @@
+package com.jpsoft.picc.modules.common.utils;
+
+import lombok.extern.slf4j.Slf4j;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+public class HttpUtil {
+    public final static String getIpAddress(HttpServletRequest request){
+        // 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址  
+
+        String ip = request.getHeader("X-Forwarded-For");
+        if (log.isInfoEnabled()) {
+            log.info("getIpAddress(HttpServletRequest) - X-Forwarded-For - String ip=" + ip);
+        }
+
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("Proxy-Client-IP");
+                if (log.isInfoEnabled()) {
+                    log.info("getIpAddress(HttpServletRequest) - Proxy-Client-IP - String ip=" + ip);
+                }
+            }
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("WL-Proxy-Client-IP");
+                if (log.isInfoEnabled()) {
+                    log.info("getIpAddress(HttpServletRequest) - WL-Proxy-Client-IP - String ip=" + ip);
+                }
+            }
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("HTTP_CLIENT_IP");
+                if (log.isInfoEnabled()) {
+                    log.info("getIpAddress(HttpServletRequest) - HTTP_CLIENT_IP - String ip=" + ip);
+                }
+            }
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getHeader("HTTP_X_FORWARDED_FOR");
+                if (log.isInfoEnabled()) {
+                    log.info("getIpAddress(HttpServletRequest) - HTTP_X_FORWARDED_FOR - String ip=" + ip);
+                }
+            }
+            if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
+                ip = request.getRemoteAddr();
+                if (log.isInfoEnabled()) {
+                    log.info("getIpAddress(HttpServletRequest) - getRemoteAddr - String ip=" + ip);
+                }
+            }
+        } else 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;
+    }
+}

+ 2 - 2
picc-enterprise-server/src/main/java/com/jpsoft/picc/advice/PermissionAdvice.java

@@ -1,6 +1,7 @@
 package com.jpsoft.picc.advice;
 
 import com.jpsoft.picc.modules.common.dto.MessageResult;
+import com.jpsoft.picc.modules.common.utils.HttpUtil;
 import com.jpsoft.picc.modules.sys.entity.SysLog;
 import com.jpsoft.picc.modules.sys.service.PermissionService;
 import com.jpsoft.picc.modules.sys.service.SysLogService;
@@ -78,9 +79,8 @@ public class PermissionAdvice {
 
         if(requestAttrs!=null) {
             HttpServletRequest request = requestAttrs.getRequest();
-            String remoteIP = request.getHeader("remote_addr");
 
-            sysLog.setRemoteIp(remoteIP);
+            sysLog.setRemoteIp(HttpUtil.getIpAddress(request));
             sysLog.setUrl(request.getRequestURI());
 
             log.warn("访问地址:" + request.getRequestURL().toString());