浏览代码

实现获取ip地址的功能,这样可以不用每次上线就去设置窗口号和打印机

hurugang 3 年之前
父节点
当前提交
6cd08c19b8

+ 36 - 0
src/main/java/cn/hnthyy/thmz/Utils/HttpUtil.java

@@ -22,6 +22,7 @@ import org.apache.http.impl.client.HttpClients;
 import org.apache.http.message.BasicNameValuePair;
 import org.apache.http.util.EntityUtils;
 
+import javax.servlet.http.HttpServletRequest;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStream;
@@ -170,6 +171,41 @@ public class HttpUtil {
     }
 
 
+    /**
+     * 获取客户端的真实ip地址
+     * @param request
+     * @return
+     */
+    public static String getIPAddress(HttpServletRequest request) {
+        String ip = null;
+        //X-Forwarded-For:Squid 服务代理
+        String ipAddresses = request.getHeader("X-Forwarded-For");
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //Proxy-Client-IP:apache 服务代理
+            ipAddresses = request.getHeader("Proxy-Client-IP");
+        }
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //WL-Proxy-Client-IP:weblogic 服务代理
+            ipAddresses = request.getHeader("WL-Proxy-Client-IP");
+        }
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //HTTP_CLIENT_IP:有些代理服务器
+            ipAddresses = request.getHeader("HTTP_CLIENT_IP");
+        }
+        if (ipAddresses == null || ipAddresses.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            //X-Real-IP:nginx服务代理
+            ipAddresses = request.getHeader("X-Real-IP");
+        }
+        //有些网络通过多层代理,那么获取到的ip就会有多个,一般都是通过逗号(,)分割开来,并且第一个ip为客户端的真实IP
+        if (ipAddresses != null && ipAddresses.length() != 0) {
+            ip = ipAddresses.split(",")[0];
+        }
+        //还是不能获取到,最后再通过request.getRemoteAddr();获取
+        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ipAddresses)) {
+            ip = request.getRemoteAddr();
+        }
+        return ip;
+    }
 
 
 }

+ 8 - 7
src/main/java/cn/hnthyy/thmz/controller/mz/WindowsController.java

@@ -1,5 +1,6 @@
 package cn.hnthyy.thmz.controller.mz;
 
+import cn.hnthyy.thmz.Utils.HttpUtil;
 import cn.hnthyy.thmz.Utils.JsonUtil;
 import cn.hnthyy.thmz.Utils.MacAddressUtil;
 import cn.hnthyy.thmz.Utils.TokenUtil;
@@ -65,11 +66,11 @@ public class WindowsController {
         DecodedJWT decodedJWT=TokenUtil.parseJWT(token);
         User tokenUser=(User)JsonUtil.jsontoObject(decodedJWT.getSubject(),User.class);
         try {
-//            String ipAddress=MacAddressUtil.getIpAddr(httpServletRequest);
-//            windows.setIpAddress(ipAddress);
+            String ipAddress=HttpUtil.getIPAddress(httpServletRequest);
+            windows.setIpAddress(ipAddress);
             windows.setUserIdCode(tokenUser.getUserIdCode());
             windows.setCreateDate(new Date());
-            Windows windowsDb=windowsService.queryLastWindowsByUserIdCode(tokenUser.getUserIdCode(),null);
+            Windows windowsDb=windowsService.queryLastWindowsByUserIdCode(tokenUser.getUserIdCode(),ipAddress);
             if(windowsDb!=null){
                 windows.setId(windowsDb.getId());
             }
@@ -121,11 +122,11 @@ public class WindowsController {
         DecodedJWT decodedJWT=TokenUtil.parseJWT(token);
         User tokenUser=(User)JsonUtil.jsontoObject(decodedJWT.getSubject(),User.class);
         try {
-//            String ipAddress=MacAddressUtil.getIpAddr(httpServletRequest);
-//            windows.setIpAddress(ipAddress);
+            String ipAddress=HttpUtil.getIPAddress(httpServletRequest);
+            windows.setIpAddress(ipAddress);
             windows.setUserIdCode(tokenUser.getUserIdCode());
             windows.setCreateDate(new Date());
-            Windows windowsDb=windowsService.queryLastWindowsByUserIdCode(tokenUser.getUserIdCode(),null);
+            Windows windowsDb=windowsService.queryLastWindowsByUserIdCode(tokenUser.getUserIdCode(),ipAddress);
             if(windowsDb!=null){
                 windows.setId(windowsDb.getId());
             }
@@ -267,7 +268,7 @@ public class WindowsController {
             return resultMap;
         }
         try {
-            String ipAddress=MacAddressUtil.getIpAddr(httpServletRequest);
+            String ipAddress=HttpUtil.getIPAddress(httpServletRequest);
             DecodedJWT decodedJWT=TokenUtil.parseJWT(token);
             User tokenUser=(User)JsonUtil.jsontoObject(decodedJWT.getSubject(),User.class);
             Windows windows=windowsService.queryLastWindowsByUserIdCode(tokenUser.getUserIdCode(),ipAddress);

+ 3 - 0
src/main/java/cn/hnthyy/thmz/mapper/thmz/WindowsMapper.java

@@ -54,6 +54,9 @@ public interface WindowsMapper {
             "<when test='cgPrintIndex!=null'>",
             ",cg_print_index=#{cgPrintIndex,jdbcType=INTEGER}",
             "</when>",
+            "<when test='ipAddress!=null'>",
+            ",ip_address=#{ipAddress}",
+            "</when>",
             "<when test='updateDate!=null'>",
             ",update_date=#{updateDate,jdbcType=TIMESTAMP}",
             "</when>",