From b185be1a1c1d20b376dccad3de5211de2292ffb9 Mon Sep 17 00:00:00 2001 From: chuzhongzai Date: Wed, 6 Dec 2023 12:56:52 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BD=AC=E5=90=91native-image;=E5=B9=B6?= =?UTF-8?q?=E5=85=A5=E5=8F=8D=E4=BB=A3=E6=9C=8D=E5=8A=A1=E5=99=A8;log4j?= =?UTF-8?q?=E6=9B=B4=E6=8D=A2=E4=B8=BAslf4j;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pom.xml | 91 +++++++------- src/main/java/lion/CustomUtil.java | 6 +- src/main/java/lion/Extranel/AESUtils.java | 26 ++++ src/main/java/lion/Extranel/Server.java | 65 ++++++++++ src/main/java/lion/Main.java | 14 ++- src/main/java/lion/Message/MessageCodec.java | 7 +- .../lion/Service/DownloadCheckService.java | 4 +- src/main/java/lion/storageNode.java | 6 +- src/main/resources/reflect-config.json | 119 ++++++++++++++++++ 9 files changed, 275 insertions(+), 63 deletions(-) create mode 100644 src/main/java/lion/Extranel/AESUtils.java create mode 100644 src/main/java/lion/Extranel/Server.java create mode 100644 src/main/resources/reflect-config.json diff --git a/pom.xml b/pom.xml index ef591ed..ced6f65 100644 --- a/pom.xml +++ b/pom.xml @@ -9,8 +9,8 @@ 1.0 - 17 - 17 + 21 + 21 UTF-8 @@ -40,11 +40,19 @@ - log4j - log4j - 1.2.17 + org.slf4j + slf4j-api + 2.0.9 + + + org.slf4j + slf4j-simple + 2.0.7 + + + cn.hutool hutool-all @@ -60,56 +68,47 @@ - - org.apache.maven.plugins - maven-assembly-plugin - 3.4.2 - - - package - - single - - - - - - jar-with-dependencies - - - - lion.Main - - - - - - - + + + - - - - + + + - - - - - - - - - - - + + + + + + + + + + org.graalvm.buildtools + native-maven-plugin + 0.9.28 + + lion.Main + storageNode + + -H:+ReportExceptionStackTraces + --gc=G1 + --enable-url-protocols=https + -H:ReflectionConfigurationFiles=src/main/resources/reflect-config.json + + + true + + + diff --git a/src/main/java/lion/CustomUtil.java b/src/main/java/lion/CustomUtil.java index 4f176da..79dddab 100644 --- a/src/main/java/lion/CustomUtil.java +++ b/src/main/java/lion/CustomUtil.java @@ -5,11 +5,7 @@ import lombok.Data; import java.io.IOException; import java.net.ServerSocket; -import java.time.LocalDateTime; -import java.time.format.DateTimeFormatter; import java.util.concurrent.atomic.AtomicInteger; -import java.util.regex.Matcher; -import java.util.regex.Pattern; @Data @@ -17,6 +13,8 @@ public class CustomUtil { public static AtomicInteger counter = new AtomicInteger(); + public static ObjectMapper objectMapper = new ObjectMapper(); + /** * 寻找一定数量的可用端口 * diff --git a/src/main/java/lion/Extranel/AESUtils.java b/src/main/java/lion/Extranel/AESUtils.java new file mode 100644 index 0000000..8797821 --- /dev/null +++ b/src/main/java/lion/Extranel/AESUtils.java @@ -0,0 +1,26 @@ +package lion.Extranel; + +import javax.crypto.Cipher; +import javax.crypto.spec.SecretKeySpec; +import java.security.Key; + +public class AESUtils { + private static final String ALGORITHM = "AES"; + private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding"; + + private static final byte[] keyBytes = "ThisIsA128BitKey".getBytes(); + + public static byte[] encrypt(byte[] data) throws Exception { + Key key = new SecretKeySpec(keyBytes, ALGORITHM); + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + cipher.init(Cipher.ENCRYPT_MODE, key); + return cipher.doFinal(data); + } + + public static byte[] decrypt(byte[] encryptedData) throws Exception { + Key key = new SecretKeySpec(keyBytes, ALGORITHM); + Cipher cipher = Cipher.getInstance(TRANSFORMATION); + cipher.init(Cipher.DECRYPT_MODE, key); + return cipher.doFinal(encryptedData); + } +} diff --git a/src/main/java/lion/Extranel/Server.java b/src/main/java/lion/Extranel/Server.java new file mode 100644 index 0000000..770b0c4 --- /dev/null +++ b/src/main/java/lion/Extranel/Server.java @@ -0,0 +1,65 @@ +package lion.Extranel; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lion.CustomUtil; +import lombok.extern.slf4j.Slf4j; + +import java.io.BufferedInputStream; +import java.io.IOException; +import java.net.ServerSocket; +import java.net.Socket; +import java.net.URI; +import java.net.URL; +import java.util.HashMap; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@Slf4j +public class Server { + + ExecutorService thread_pool; + + ObjectMapper objectMapper; + + public static void main(String[] args) { + new Server(); + } + + public Server(){ + log.info("开始监听:55555"); + objectMapper = CustomUtil.objectMapper; + thread_pool = Executors.newFixedThreadPool(2); + thread_pool.submit(() -> { + try(ServerSocket server = new ServerSocket(55555)){ + server.setSoTimeout(1000000); + while (true){ + Socket socket = server.accept(); + thread_pool.submit(() -> handleSocket(socket)); + } + }catch (IOException e){ + log.error(e.getMessage()); + } + }); + } + + + public void handleSocket(Socket socket){ + try{ + BufferedInputStream inputStream = new BufferedInputStream(socket.getInputStream()); + Thread.sleep(500); + byte[] buf = new byte[inputStream.available()]; + inputStream.read(buf); + byte[] bytes = AESUtils.decrypt(buf); + + HashMap map = (HashMap) objectMapper.readValue(bytes, HashMap.class); + URL url = new URI(map.get("path")).toURL(); + log.info("处理反代 ip: {},路径: {}", socket.getInetAddress().getHostAddress(), map.get("path")); + bytes = url.openConnection().getInputStream().readAllBytes(); + socket.getOutputStream().write(AESUtils.encrypt(bytes)); + socket.getOutputStream().flush(); + socket.getOutputStream().close(); + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/lion/Main.java b/src/main/java/lion/Main.java index 3d17736..af58463 100644 --- a/src/main/java/lion/Main.java +++ b/src/main/java/lion/Main.java @@ -1,14 +1,20 @@ package lion; -import lombok.extern.log4j.Log4j; +import io.netty.bootstrap.Bootstrap; +import lion.Extranel.Server; +import lombok.extern.slf4j.Slf4j; -@Log4j +@Slf4j public class Main { public static void main(String[] args) { - + boot(); new Thread(() -> MultiThreadedHTTPServer.main(null)).start(); - + new Thread(() -> Server.main(null)).start(); new storageNode(); } + + public static void boot(){ + new Bootstrap(); + } } diff --git a/src/main/java/lion/Message/MessageCodec.java b/src/main/java/lion/Message/MessageCodec.java index 4259c2a..e569e5d 100644 --- a/src/main/java/lion/Message/MessageCodec.java +++ b/src/main/java/lion/Message/MessageCodec.java @@ -5,20 +5,21 @@ import com.fasterxml.jackson.databind.ObjectMapper; import io.netty.buffer.ByteBuf; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.ByteToMessageCodec; +import lion.CustomUtil; import lion.Message.Acclerator.FileTransferMessage; import lion.Message.Main.*; -import lombok.extern.log4j.Log4j; +import lombok.extern.slf4j.Slf4j; import java.nio.charset.StandardCharsets; import java.util.List; -@Log4j +@Slf4j public class MessageCodec extends ByteToMessageCodec { ObjectMapper objectMapper; public MessageCodec(){ - objectMapper = new ObjectMapper(); + objectMapper = CustomUtil.objectMapper; } @Override diff --git a/src/main/java/lion/Service/DownloadCheckService.java b/src/main/java/lion/Service/DownloadCheckService.java index 467b9b5..f92ea90 100644 --- a/src/main/java/lion/Service/DownloadCheckService.java +++ b/src/main/java/lion/Service/DownloadCheckService.java @@ -13,7 +13,7 @@ import cn.hutool.core.util.ZipUtil; import lion.Message.AbstractMessage; import lion.Message.Acclerator.FileTransferMessage; import lombok.Data; -import lombok.extern.log4j.Log4j; +import lombok.extern.slf4j.Slf4j; import org.im4java.core.ConvertCmd; import org.im4java.core.IM4JavaException; import org.im4java.core.IMOperation; @@ -30,7 +30,7 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.locks.ReentrantLock; -@Log4j +@Slf4j @Data public class DownloadCheckService { ArrayList queue; diff --git a/src/main/java/lion/storageNode.java b/src/main/java/lion/storageNode.java index c31c368..aae452f 100644 --- a/src/main/java/lion/storageNode.java +++ b/src/main/java/lion/storageNode.java @@ -15,7 +15,7 @@ import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.nio.NioServerSocketChannel; import io.netty.channel.socket.nio.NioSocketChannel; import io.netty.handler.codec.LengthFieldBasedFrameDecoder; -import lombok.extern.log4j.Log4j; +import lombok.extern.slf4j.Slf4j; import java.io.FileOutputStream; @@ -27,7 +27,7 @@ import java.util.HashMap; import java.util.concurrent.*; import java.util.concurrent.locks.ReentrantLock; -@Log4j +@Slf4j public class storageNode { ChannelFuture channelFuture; @@ -46,8 +46,6 @@ public class storageNode { HashMap> promises; - EventLoop eventLoop; - int counter; ReentrantLock lock; diff --git a/src/main/resources/reflect-config.json b/src/main/resources/reflect-config.json new file mode 100644 index 0000000..57b7a6a --- /dev/null +++ b/src/main/resources/reflect-config.json @@ -0,0 +1,119 @@ +[ + { + "name": "lion.Message.Acclerator.FileTransferMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.Main.DeleteGalleryMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.Main.DownloadPostMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.Main.DownloadStatusMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.Main.GalleryPageQueryMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.Main.GalleryRequestMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.Main.IdentityMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.Main.MaintainMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.Main.ResponseMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.Main.UpdateGalleryMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Message.AbstractMessage", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "lion.Domain.GalleryTask", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + }, + { + "name": "com.fasterxml.jackson.databind.ObjectMapper", + "allDeclaredConstructors" : true, + "allPublicConstructors" : true, + "allDeclaredMethods" : true, + "allPublicMethods" : true, + "allDeclaredFields" : true, + "allPublicFields" : true + } +] \ No newline at end of file