dsx 2 anni fa
parent
commit
f58ab1fdab

+ 3 - 2
src/main/java/com/fdkankan/tracking/bean/TrackingBody.java

@@ -14,11 +14,12 @@ public class TrackingBody {
     private String userId;
     private Date time;
     private String url;
-    private String urlParam;
     private JSONObject requestData;
     private String source;
     private String referrer;
-    private String referrerParam;
+    private String scheme;
+    private String host;
+    private String path;
     private String eventType;
     private String eventName;
     private String userIP;

+ 2 - 2
src/main/java/com/fdkankan/tracking/controller/TrackingController.java

@@ -47,7 +47,7 @@ public class TrackingController extends BaseController {
 //    }
 
     @PostMapping("/save")
-    public ResultData saveLog(@RequestBody TrackingParamVo param) throws IOException {
+    public ResultData saveLog(@RequestBody TrackingParamVo param) throws Exception {
         return trackingService.saveLog(param, request);
     }
 
@@ -58,7 +58,7 @@ public class TrackingController extends BaseController {
 //    }
 
     @PostMapping("/saveBeacon")
-    public ResultData saveBeacon(@RequestBody String params) throws IOException {
+    public ResultData saveBeacon(@RequestBody String params) throws Exception {
         TrackingParamVo param = JSON.parseObject(params, TrackingParamVo.class);
         return trackingService.saveLog(param, request);
     }

+ 1 - 1
src/main/java/com/fdkankan/tracking/service/TrackingService.java

@@ -8,5 +8,5 @@ import java.io.IOException;
 
 public interface TrackingService {
 
-    ResultData saveLog(TrackingParamVo param, HttpServletRequest request) throws IOException;
+    ResultData saveLog(TrackingParamVo param, HttpServletRequest request) throws IOException, Exception;
 }

+ 11 - 51
src/main/java/com/fdkankan/tracking/service/impl/TrackingServiceImpl.java

@@ -2,32 +2,23 @@ package com.fdkankan.tracking.service.impl;
 
 import cn.hutool.core.bean.BeanUtil;
 import cn.hutool.core.collection.CollUtil;
-import cn.hutool.extra.servlet.ServletUtil;
-import cn.hutool.http.HttpUtil;
+import cn.hutool.core.util.StrUtil;
 import com.alibaba.fastjson.JSON;
-import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.fastjson.serializer.SerializerFeature;
 import com.fdkankan.elasticsearch.service.DocumentService;
 import com.fdkankan.tracking.bean.TrackingBody;
-import com.fdkankan.tracking.utils.EsUtil;
 import com.fdkankan.tracking.vo.TrackingParamVo;
 import com.fdkankan.tracking.service.TrackingService;
-import com.fdkankan.tracking.utils.IpUtils;
 import com.fdkankan.web.response.ResultData;
-import com.google.common.collect.Lists;
+import com.fdkankan.web.util.WebUtil;
 import lombok.extern.slf4j.Slf4j;
 import org.elasticsearch.rest.RestStatus;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 import org.springframework.util.ObjectUtils;
-import org.springframework.web.client.RestTemplate;
 
 import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
+import java.net.URI;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -35,57 +26,26 @@ import java.util.stream.Collectors;
 @Service
 public class TrackingServiceImpl implements TrackingService {
 
-
-//    public void save(TrackingParamVo entity) {
-//        if(entity.getPayload().getUrl().contains("?")){
-//            String[] url = entity.getPayload().getUrl().split("\\?");
-//            entity.getPayload().setUrl(url[0]);
-//            entity.getPayload().setUrlParam(url[1]);
-//        }
-//        if(entity.getPayload().getReferrer().contains("?")){
-//            String[] reffer = entity.getPayload().getReferrer().split("\\?");
-//            entity.getPayload().setReferrer(reffer[0]);
-//            entity.getPayload().setReferrerParam(reffer[1]);
-//        }
-//        String url = esHost.concat("/").concat(entity.getType().toLowerCase()).concat("/log?pretty&pretty");
-//        log.info("es host:{}", url);
-//        try{
-//            // value 转换为String 格式
-//            TrackingBody trackingBody = JSONObject.parseObject(JSONObject.toJSONString(entity.getPayload(), SerializerFeature.WriteNonStringValueAsString), TrackingBody.class);
-//            restTemplate.postForEntity(url, trackingBody, String.class);
-//        }catch (Exception e){
-//            e.printStackTrace();
-//            throw new RuntimeException(e.getMessage());
-//        }
-//    }
-
-//    @Autowired
-//    private EsUtil esUtil;
     @Autowired
     private DocumentService documentService;
 
-
     @Override
-    public ResultData saveLog(TrackingParamVo param, HttpServletRequest request) throws IOException {
+    public ResultData saveLog(TrackingParamVo param, HttpServletRequest request) throws Exception {
         TrackingBody trackingBody = param.getPayload();
         if(ObjectUtils.isEmpty(trackingBody)){
             return ResultData.ok();
         }
         trackingBody.setUserAgent(request.getHeader("user-agent"));
-        trackingBody.setUserIP(ServletUtil.getClientIP(request));
+        trackingBody.setUserIP(WebUtil.getIpAddress(request));
         trackingBody.setTime(Calendar.getInstance().getTime());
         trackingBody.setSource("FRONT");
 
-        if(trackingBody.getUrl().contains("?")){
-            String[] url = trackingBody.getUrl().split("\\?");
-            trackingBody.setUrl(url[0]);
-            trackingBody.setUrlParam(url[1]);
-        }
-
-        if(trackingBody.getReferrer().contains("?")){
-            String[] reffer = trackingBody.getReferrer().split("\\?");
-            trackingBody.setReferrer(reffer[0]);
-            trackingBody.setReferrerParam(reffer[1]);
+        String referrer = trackingBody.getReferrer();
+        if(StrUtil.isNotEmpty(referrer)){
+            URI uri = new URI(referrer);
+            trackingBody.setScheme(uri.getScheme());
+            trackingBody.setHost(uri.getHost());
+            trackingBody.setPath(uri.getPath());
         }
 
         //获取索引名

+ 0 - 93
src/main/java/com/fdkankan/tracking/utils/IpUtils.java

@@ -1,93 +0,0 @@
-package com.fdkankan.tracking.utils;
-
-import com.alibaba.fastjson.JSONObject;
-import org.lionsoul.ip2region.xdb.Searcher;
-import org.springframework.http.*;
-import org.springframework.web.client.RestTemplate;
-
-import javax.servlet.http.HttpServletRequest;
-import java.io.IOException;
-
-public class IpUtils {
-
-    private static RestTemplate restTemplate = new RestTemplate();
-
-    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;
-    }
-
-    public static void main(String[] args) throws Exception {
-
-        String dbPath = "D:\\tools\\ip2region-master\\data\\ip2region.xdb";
-        byte[] vIndex = Searcher.loadVectorIndexFromFile(dbPath);
-        Searcher searcher = Searcher.newWithVectorIndex(dbPath, vIndex);
-        System.out.println(searcher.search("221.4.210.172"));
-
-
-    }
-
-    public static String getUserAddress(String ip) {
-        try {
-//            OkHttpClient client = new OkHttpClient().newBuilder()
-//                    .build();
-//            MediaType mediaType = MediaType.parse("text/plain");
-//            RequestBody body = RequestBody.create(mediaType, "");
-//            Request request = new Request.Builder()
-//                    .url("https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=221.4.210.172")
-//                    .method("GET", null)
-//                    .addHeader("Cookie", "XSRF-TOKEN=863142da-e773-4e28-9dda-e256fcdb42e5")
-//                    .build();
-//            Response response = client.newCall(request).execute();
-//            return JSONObject.parseObject(response.body().string()).getString("data");
-
-//            HttpHeaders headers = new HttpHeaders();
-//            MediaType type = MediaType.TEXT_PLAIN;
-//            headers.setContentType(type);
-//            HttpEntity<String> formEntity = new HttpEntity<>(null,headers);
-//            ResponseEntity<JSONObject> responseEntity = restTemplate.exchange("http://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=" + ip,
-//                    HttpMethod.GET,formEntity, JSONObject.class);
-//            return responseEntity.getBody().getJSONObject("data").toJSONString();
-
-
-            restTemplate.getForObject("https://ip.taobao.com/outGetIpInfo?accessKey=alibaba-inc&ip=221.4.210.172",String.class);
-        } catch (Exception e) {
-            e.printStackTrace();
-        }
-        return "";
-    }
-
-}