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