浏览代码

Merge branch 'mazq-ip-0803' into 'release/v2.4.0'

feature(ip日志打印): ip日志打印

See merge request dcuc-tjdsj/auth-back!74
马志强 3 年之前
父节点
当前提交
ef216cc509
共有 1 个文件被更改,包括 38 次插入2 次删除
  1. 38 2
      src/main/java/com/dragoninfo/dcuc/authweb/interceptor/FeignHeadInterceptor.java

+ 38 - 2
src/main/java/com/dragoninfo/dcuc/authweb/interceptor/FeignHeadInterceptor.java

@@ -4,24 +4,60 @@ import com.dragoninfo.dcuc.common.Constants;
 import com.dragonsoft.duceap.commons.util.ip.IpUtils;
 import feign.RequestInterceptor;
 import feign.RequestTemplate;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.web.context.request.RequestContextHolder;
 import org.springframework.web.context.request.ServletRequestAttributes;
 
 import javax.servlet.http.HttpServletRequest;
+import java.net.InetAddress;
 
 /**
  * 添加调用到后端的请求头
  * @author mazq
  * @date 2021/7/29
  */
+@Slf4j
 public class FeignHeadInterceptor implements RequestInterceptor {
     @Override
     public void apply(RequestTemplate template) {
         ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
         if(attributes!=null) {
             HttpServletRequest request = attributes.getRequest();
-            String realIpAddress = IpUtils.getRealIpAdrress(request);
-            template.header(Constants.REAL_IP_ADDRESS_KEY, realIpAddress);
+            String ipAddr = getIpAddr(request);
+            String ipAddress1 = IpUtils.getRealIpAdrress(request);
+            template.header(Constants.REAL_IP_ADDRESS_KEY, ipAddr);
+            log.info("FeignHeadInterceptor ipAddr:{}, ipAddress1:{}", ipAddr, ipAddress1);
         }
     }
+
+    private String getIpAddr(HttpServletRequest request) {
+        String 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();
+            if(ipAddress.equals("127.0.0.1") || ipAddress.equals("0:0:0:0:0:0:0:1")) {
+                //根据网卡取本机配置的IP
+                InetAddress inet=null;
+                try {
+                    inet = InetAddress.getLocalHost();
+                } catch (Exception e) {
+                    e.printStackTrace();
+                }
+                ipAddress= inet.getHostAddress();
+            }
+        }
+        //对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
+        if(ipAddress!=null && ipAddress.length()>15) { //"***.***.***.***".length() = 15
+            if(ipAddress.indexOf(",")>0) {
+                ipAddress = ipAddress.substring(0,ipAddress.indexOf(","));
+            }
+        }
+        return ipAddress;
+    }
+
 }