Browse Source

营销系统-IP修改

wangcl 1 week ago
parent
commit
1491ee93f4

+ 15 - 14
pig-common/pig-common-core/src/main/java/com/pig4cloud/pig/common/core/util/ip/IPUtils.java

@@ -7,16 +7,14 @@ import lombok.extern.log4j.Log4j2;
 import org.lionsoul.ip2region.xdb.Searcher;
 import org.lionsoul.ip2region.xdb.Searcher;
 
 
 import java.io.BufferedReader;
 import java.io.BufferedReader;
+import java.io.File;
 import java.io.IOException;
 import java.io.IOException;
-import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.InputStreamReader;
 import java.net.HttpURLConnection;
 import java.net.HttpURLConnection;
 import java.net.InetAddress;
 import java.net.InetAddress;
 import java.net.URL;
 import java.net.URL;
 import java.net.UnknownHostException;
 import java.net.UnknownHostException;
 import java.nio.charset.StandardCharsets;
 import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.List;
@@ -58,18 +56,21 @@ public class IPUtils {
 		// use jar resource file  file
 		// use jar resource file  file
 
 
 		try{
 		try{
-			ClassLoader classLoader = IPUtils.class.getClassLoader();
-			if (classLoader.getResourceAsStream("ip/ip2region.xdb") == null) {
-				 log.error("初始化IP地址索引失败");
-			}
-			log.info("初始化IP地址索引成功 (classpath)");
-			InputStream is = classLoader.getResourceAsStream("ip/ip2region.xdb");
-			byte[] cBuff = is.readAllBytes();
-			Path tmp = Files.createTempFile("ip2region", ".xdb");
-			Files.write(tmp, cBuff);
+//			ClassLoader classLoader =this.getClass().getClassLoader();
+//			if (classLoader.getResourceAsStream("ip/ip2region.xdb") == null) {
+//				 log.error("初始化IP地址索引失败");
+//			}
+//			log.info("初始化IP地址索引成功 (classpath)");
+//			InputStream is = classLoader.getResourceAsStream("ip/ip2region.xdb");
+//			byte[] cBuff = is.readAllBytes();
+//			Path tmp = Files.createTempFile("ip2region", ".xdb");
+//			Files.write(tmp, cBuff);
 //			subtleSetDeleteOnExit(tmp);
 //			subtleSetDeleteOnExit(tmp);
-			URL url = classLoader.getResource("ip/ip2region.xdb");
-			searcher = Searcher.newWithFileOnly(url.getPath());
+			// 获取程序目录下的ip文件
+
+			File xdb = new File("./ip/ip2region_v4.xdb");
+//			URL url = classLoader.getResource("ip/ip2region_v4.xdb");
+			searcher = Searcher.newWithFileOnly(xdb.getPath());
 		} catch (IOException e) {
 		} catch (IOException e) {
 			         log.error("初始化IP地址索引失败", e);
 			         log.error("初始化IP地址索引失败", e);
 					 throw  e;
 					 throw  e;

BIN
pig-common/pig-common-core/src/main/resources/ip/ip2region.xdb → pig-common/pig-common-core/src/main/resources/ip/ip2region_v4.xdb


+ 1 - 1
pig-common/pig-common-security/src/main/java/com/pig4cloud/pig/common/security/component/PermitAllUrlProperties.java

@@ -46,7 +46,7 @@ public class PermitAllUrlProperties implements InitializingBean {
 
 
 	private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}");
 	private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}");
 
 
-	private static final String[] DEFAULT_IGNORE_URLS = new String[] { "/actuator/**", "/error", "/v3/api-docs" };
+	private static final String[] DEFAULT_IGNORE_URLS = new String[] { "/actuator/**", "/error", "/v3/api-docs","/tcp/**" };
 
 
 	@Getter
 	@Getter
 	@Setter
 	@Setter

+ 1 - 1
pig-marketing/pig-marketing-biz/Dockerfile

@@ -10,4 +10,4 @@ EXPOSE 6000
 
 
 ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
 ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
 
 
-CMD sleep 60; java $JAVA_OPTS -jar app.jar
+CMD  java $JAVA_OPTS -jar app.jar

+ 3 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/PigMarketingApplication.java

@@ -1,6 +1,7 @@
 package com.pig4cloud.pig.marketing;
 package com.pig4cloud.pig.marketing;
 
 
 
 
+import com.pig4cloud.pig.common.core.util.ip.IPUtils;
 import com.pig4cloud.pig.common.feign.annotation.EnablePigFeignClients;
 import com.pig4cloud.pig.common.feign.annotation.EnablePigFeignClients;
 import com.pig4cloud.pig.common.security.annotation.EnablePigResourceServer;
 import com.pig4cloud.pig.common.security.annotation.EnablePigResourceServer;
 import com.pig4cloud.pig.common.swagger.annotation.EnablePigDoc;
 import com.pig4cloud.pig.common.swagger.annotation.EnablePigDoc;
@@ -21,7 +22,9 @@ import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
 public class PigMarketingApplication {
 public class PigMarketingApplication {
 
 
 	public static void main(String[] args) {
 	public static void main(String[] args) {
+		System.out.println("xxxxtest---"+IPUtils.getIpRegion("1.1.1.1"));
 		SpringApplication.run(PigMarketingApplication.class, args);
 		SpringApplication.run(PigMarketingApplication.class, args);
+
 	}
 	}
 
 
 }
 }

+ 11 - 6
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/controller/TcpDataController.java

@@ -3,17 +3,14 @@ package com.pig4cloud.pig.marketing.controller;
 
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.pig4cloud.pig.common.core.util.R;
 import com.pig4cloud.pig.common.core.util.R;
-import com.pig4cloud.pig.marketing.api.dto.mongo.PageDeviceInfoDTO;
-import com.pig4cloud.pig.marketing.api.dto.mongo.PageMessageDTO;
-import com.pig4cloud.pig.marketing.api.dto.mongo.SaveDeviceInfoDTO;
-import com.pig4cloud.pig.marketing.api.dto.mongo.SaveTcpMessageDTO;
+import com.pig4cloud.pig.common.core.util.ip.IPUtils;
+import com.pig4cloud.pig.marketing.api.dto.mongo.*;
 import com.pig4cloud.pig.marketing.api.entity.mongo.Device;
 import com.pig4cloud.pig.marketing.api.entity.mongo.Device;
 import com.pig4cloud.pig.marketing.api.entity.mongo.Message;
 import com.pig4cloud.pig.marketing.api.entity.mongo.Message;
 import com.pig4cloud.pig.marketing.api.vo.mongo.OnlineUserVO;
 import com.pig4cloud.pig.marketing.api.vo.mongo.OnlineUserVO;
 import com.pig4cloud.pig.marketing.api.vo.mongo.PageDeviceInfoVO;
 import com.pig4cloud.pig.marketing.api.vo.mongo.PageDeviceInfoVO;
-import com.pig4cloud.pig.marketing.api.vo.mongo.UserStatisticsVO;
-import com.pig4cloud.pig.marketing.api.dto.mongo.UserRegionStatisticsDTO;
 import com.pig4cloud.pig.marketing.api.vo.mongo.UserRegionStatisticsVO;
 import com.pig4cloud.pig.marketing.api.vo.mongo.UserRegionStatisticsVO;
+import com.pig4cloud.pig.marketing.api.vo.mongo.UserStatisticsVO;
 import com.pig4cloud.pig.marketing.service.TcpDataService;
 import com.pig4cloud.pig.marketing.service.TcpDataService;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.Operation;
 import io.swagger.v3.oas.annotations.security.SecurityRequirement;
 import io.swagger.v3.oas.annotations.security.SecurityRequirement;
@@ -44,6 +41,14 @@ public class TcpDataController {
 
 
 	private final TcpDataService tcpDataService;
 	private final TcpDataService tcpDataService;
 
 
+
+	// set AnonymousAuthenticationFilte
+	@GetMapping("iptest")
+	@Operation(summary = "测试IP地址")
+	public R<String> iptest() {
+		return R.ok(IPUtils.getIpRegion("1.1.1.1"));
+	}
+
 	/******************************************* 设备 *******************************************/
 	/******************************************* 设备 *******************************************/
 	@PostMapping("/device/save")
 	@PostMapping("/device/save")
 	@Operation(summary = "保存或更新设备信息")
 	@Operation(summary = "保存或更新设备信息")

+ 52 - 0
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/util/FileValidator.java

@@ -0,0 +1,52 @@
+package com.pig4cloud.pig.marketing.util;
+
+
+import com.pig4cloud.pig.common.core.util.ip.IPUtils;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.security.MessageDigest;
+
+/**
+ * @author wcl
+ * @date 2025/9/7 20:16
+ * @description: TODO
+ */
+public class FileValidator {
+
+	public static void main(String[] args) {
+		String filePath = "D:\\code\\pig-common\\pig-common-core\\src\\main\\resources\\ip\\ip2region.xdb";
+		File file = new File(filePath);
+
+		String str = IPUtils.getIpRegion("184.104.221.71");
+		System.out.println("文件大小: " + file.length() + " bytes");
+		System.out.println("文件存在: " + file.exists());
+		System.out.println("可读: " + file.canRead());
+		System.out.println("地区为:--"  +str);
+
+		// 计算MD5校验和(可选)
+		try {
+			String md5 = calculateMD5(file);
+			System.out.println("MD5: " + md5);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	private static String calculateMD5(File file) throws Exception {
+		MessageDigest digest = MessageDigest.getInstance("MD5");
+		try (FileInputStream fis = new FileInputStream(file)) {
+			byte[] byteArray = new byte[1024];
+			int bytesCount;
+			while ((bytesCount = fis.read(byteArray)) != -1) {
+				digest.update(byteArray, 0, bytesCount);
+			}
+		}
+		byte[] bytes = digest.digest();
+		StringBuilder sb = new StringBuilder();
+		for (byte b : bytes) {
+			sb.append(String.format("%02x", b));
+		}
+		return sb.toString();
+	}
+}

+ 4 - 27
pig-marketing/pig-marketing-biz/src/main/java/com/pig4cloud/pig/marketing/util/IPLocationUtil.java

@@ -8,8 +8,7 @@ import org.lionsoul.ip2region.xdb.Searcher;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 import org.springframework.stereotype.Component;
 
 
-import java.io.InputStream;
-import java.nio.file.Files;
+import java.io.File;
 import java.nio.file.Path;
 import java.nio.file.Path;
 import java.util.List;
 import java.util.List;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeUnit;
@@ -41,31 +40,9 @@ public class IPLocationUtil {
      */
      */
 	private static void initIpSearcher() {
 	private static void initIpSearcher() {
 		try {
 		try {
-			// 1) 外部路径优先:系统属性 ip2region.db 或 环境变量 IP2REGION_DB_PATH
-			String externalPath = System.getProperty("ip2region.db");
-			if (externalPath == null || externalPath.trim().isEmpty()) {
-				externalPath = System.getenv("IP2REGION_DB_PATH");
-			}
-			if (externalPath != null && !externalPath.trim().isEmpty()) {
-				searcher = Searcher.newWithFileOnly(externalPath.trim());
-				log.info("IPLocationUtil ip2region初始化成功 (external path: {})", externalPath);
-				return;
-			}
-
-			// 2) 从classpath读取写入临时文件,再基于文件初始化
-			try (InputStream is = IPLocationUtil.class.getClassLoader().getResourceAsStream("ip/ip2region.xdb")) {
-				if (is == null) {
-					log.error("IPLocationUtil ip2region资源不存在: ip/ip2region.xdb");
-					searcher = null;
-					return;
-				}
-				byte[] cBuff = is.readAllBytes();
-				Path tmp = Files.createTempFile("ip2region", ".xdb");
-				Files.write(tmp, cBuff);
-//				subtleSetDeleteOnExit(tmp);
-				searcher = Searcher.newWithFileOnly(tmp.toString());
-				log.info("IPLocationUtil ip2region初始化成功 (temp file: {})", tmp);
-			}
+			File xdb = new File("./ip/ip2region_v4.xdb");
+//			URL url = classLoader.getResource("ip/ip2region_v4.xdb");
+			searcher = Searcher.newWithFileOnly(xdb.getPath());
 		} catch (Exception e) {
 		} catch (Exception e) {
 			log.error("IPLocationUtil ip2region初始化失败", e);
 			log.error("IPLocationUtil ip2region初始化失败", e);
 			searcher = null;
 			searcher = null;

BIN
pig-marketing/pig-marketing-biz/src/main/resources/ip/ip2region.xdb


+ 16 - 0
pom.xml

@@ -347,6 +347,22 @@
 			</activation>
 			</activation>
 		</profile>
 		</profile>
 
 
+		<profile>
+			<id>cloud</id>
+			<properties>
+				<!-- 环境标识,需要与配置文件的名称相对应 -->
+				<profiles.active>dev</profiles.active>
+				<nacos.address>http://43.199.205.45:8848</nacos.address>
+				<nacos.namespace>75810fa8-f894-4980-bf60-e95ead645787</nacos.namespace>
+				<nacos.username>nacos</nacos.username>
+				<nacos.password>ckztSZtHFD</nacos.password>
+			</properties>
+			<activation>
+				<!-- 默认环境 -->
+				<activeByDefault>true</activeByDefault>
+			</activation>
+		</profile>
+
 
 
 <!--		<profile>-->
 <!--		<profile>-->
 <!--			<id>test</id>-->
 <!--			<id>test</id>-->