diff --git a/neutrino-proxy-client-sdk/pom.xml b/neutrino-proxy-client-sdk/pom.xml index 9db95010..65325285 100644 --- a/neutrino-proxy-client-sdk/pom.xml +++ b/neutrino-proxy-client-sdk/pom.xml @@ -3,32 +3,67 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - neutrino-proxy - org.dromara.neutrino-proxy - ${revision} - ../pom.xml + org.noear + solon-parent + 2.5.12 + 4.0.0 - jar + org.dromara.neutrino-proxy neutrino-proxy-client-sdk - + ${revision} + jar + + 2.0.1 + 1.18.30 + 5.8.20 + org.dromara.neutrino-proxy neutrino-proxy-core ${revision} + + + org.noear + solon-test + + + org.noear + solon.aot + + + org.noear + solon.logging.logback + + + cn.hutool + hutool-core + + + cn.hutool + hutool-cache + + - org.noear - solon-lib + org.projectlombok + lombok + ${lombok.version} - com.github.jsqlparser - jsqlparser - 4.5 - compile + org.apache.logging.log4j + log4j-slf4j-impl + 2.20.0 + provided + + cn.hutool + hutool-all + ${hutool.version} + + diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IProxyConfiguration.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IProxyConfiguration.java index abe2a641..007eb8ba 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IProxyConfiguration.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/IProxyConfiguration.java @@ -180,8 +180,8 @@ public abstract class IProxyConfiguration { return bootstrap; } - public NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar() { - return new NeutrinoCoreRuntimeNativeRegistrar(); - } +// public NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar() { +// return new NeutrinoCoreRuntimeNativeRegistrar(); +// } } diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/ProxyConfig.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/ProxyConfig.java index ba740bef..eb2abdfd 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/ProxyConfig.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/ProxyConfig.java @@ -1,8 +1,6 @@ package org.dromara.neutrinoproxy.client.sdk.config; import lombok.Data; -import org.noear.solon.annotation.Component; -import org.noear.solon.annotation.Inject; /** * @@ -10,13 +8,9 @@ import org.noear.solon.annotation.Inject; * @date: 2022/6/16 */ @Data -@Component public class ProxyConfig { - @Inject("${neutrino.proxy.protocol}") private Protocol protocol; - @Inject("${neutrino.proxy.tunnel}") private Tunnel tunnel; - @Inject("${neutrino.proxy.client}") private Client client; @Data diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java index 9e442ea7..b560451f 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/IAbProxyClientService.java @@ -11,7 +11,6 @@ import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; import org.dromara.neutrinoproxy.client.sdk.util.ProxyUtil; import org.dromara.neutrinoproxy.client.sdk.util.UdpServerUtil; import org.dromara.neutrinoproxy.core.ProxyMessage; -import org.noear.solon.Solon; import java.util.concurrent.TimeUnit; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -31,6 +30,8 @@ public class IAbProxyClientService { public Bootstrap udpServerBootstrap; + public Boolean isAotRuntime; + private volatile Channel channel; /** * 重连次数 @@ -46,7 +47,7 @@ public class IAbProxyClientService { reconnectExecutor.scheduleWithFixedDelay(this::reconnect, 10, proxyConfig.getTunnel().getReconnection().getIntervalSeconds(), TimeUnit.SECONDS); try { this.start(); - UdpServerUtil.initCache(proxyConfig, udpServerBootstrap); + UdpServerUtil.initCache(proxyConfig, udpServerBootstrap,isAotRuntime); } catch (Exception e) { // 启动连不上也做一下重连,因此先catch异常 log.error("[CmdChannel] start error", e); @@ -56,23 +57,19 @@ public class IAbProxyClientService { public void start() { if (StrUtil.isEmpty(proxyConfig.getTunnel().getServerIp())) { log.error("not found server-ip config."); - Solon.stop(); return; } if (null == proxyConfig.getTunnel().getServerPort()) { log.error("not found server-port config."); - Solon.stop(); return; } if (null != proxyConfig.getTunnel().getSslEnable() && proxyConfig.getTunnel().getSslEnable() && StrUtil.isEmpty(proxyConfig.getTunnel().getJksPath())) { log.error("not found jks-path config."); - Solon.stop(); return; } if (StrUtil.isEmpty(proxyConfig.getTunnel().getLicenseKey())) { log.error("not found license-key config."); - Solon.stop(); return; } if (null == channel || !channel.isActive()) { @@ -82,7 +79,7 @@ public class IAbProxyClientService { log.error("client start error", e); } } else { - channel.writeAndFlush(ProxyMessage.buildAuthMessage(proxyConfig.getTunnel().getLicenseKey(), ProxyUtil.getClientId())); + channel.writeAndFlush(ProxyMessage.buildAuthMessage(proxyConfig.getTunnel().getLicenseKey(), ProxyUtil.getClientId(proxyConfig))); } } @@ -99,7 +96,7 @@ public class IAbProxyClientService { channel = future.channel(); // 连接成功,向服务器发送客户端认证信息(licenseKey) ProxyUtil.setCmdChannel(future.channel()); - future.channel().writeAndFlush(ProxyMessage.buildAuthMessage(proxyConfig.getTunnel().getLicenseKey(), ProxyUtil.getClientId())); + future.channel().writeAndFlush(ProxyMessage.buildAuthMessage(proxyConfig.getTunnel().getLicenseKey(), ProxyUtil.getClientId(proxyConfig))); log.info("[CmdChannel] connect proxy server success. channelId:{}", future.channel().id().asLongText()); // reconnectServiceEnable = true; diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/TcpProxyChannelHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/TcpProxyChannelHandler.java index 59161321..41f1c7ff 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/TcpProxyChannelHandler.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/TcpProxyChannelHandler.java @@ -7,12 +7,9 @@ import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.timeout.IdleStateEvent; import lombok.extern.slf4j.Slf4j; import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler; -import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; import org.dromara.neutrinoproxy.client.sdk.util.ProxyUtil; import org.dromara.neutrinoproxy.core.Constants; import org.dromara.neutrinoproxy.core.ProxyMessage; -import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher; -import org.noear.solon.Solon; /** * 处理与服务端之间的数据传输 diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/UdpProxyChannelHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/UdpProxyChannelHandler.java index 40dec1b6..1c28efbc 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/UdpProxyChannelHandler.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/core/UdpProxyChannelHandler.java @@ -10,8 +10,6 @@ import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler; import org.dromara.neutrinoproxy.client.sdk.util.ProxyUtil; import org.dromara.neutrinoproxy.core.Constants; import org.dromara.neutrinoproxy.core.ProxyMessage; -import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher; -import org.noear.solon.Solon; /** * 处理与服务端之间的数据传输 diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageAuthHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageAuthHandler.java index 5ae9219e..f85ee936 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageAuthHandler.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageAuthHandler.java @@ -1,5 +1,7 @@ package org.dromara.neutrinoproxy.client.sdk.handler; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; @@ -8,8 +10,6 @@ import org.dromara.neutrinoproxy.core.ExceptionEnum; import org.dromara.neutrinoproxy.core.ProxyMessage; import org.dromara.neutrinoproxy.core.ProxyMessageHandler; import org.dromara.neutrinoproxy.core.dispatcher.Match; -import org.noear.snack.ONode; -import org.noear.solon.Solon; /** * 认证信息处理器 @@ -21,21 +21,24 @@ import org.noear.solon.Solon; public class ProxyMessageAuthHandler implements ProxyMessageHandler { private ProxyConfig proxyConfig; - public ProxyMessageAuthHandler(ProxyConfig proxyConfig){ + private Runnable stop; + + public ProxyMessageAuthHandler(ProxyConfig proxyConfig,Runnable stop){ this.proxyConfig=proxyConfig; + this.stop=stop; } @Override public void handle(ChannelHandlerContext context, ProxyMessage proxyMessage) { String info = proxyMessage.getInfo(); - ONode load = ONode.load(info); - Integer code = load.get("code").getInt(); + JSONObject load = JSONUtil.parseObj(info); + Integer code = load.getInt("code"); log.info("Auth result:{}", info); if (ExceptionEnum.AUTH_FAILED.getCode().equals(code)) { // 客户端认证失败,直接停止服务 log.info("client auth failed , client stop."); context.channel().close(); if (!proxyConfig.getTunnel().getReconnection().getUnlimited()) { - Solon.stop(); + stop.run(); } } else if (ExceptionEnum.CONNECT_FAILED.getCode().equals(code) || ExceptionEnum.LICENSE_CANNOT_REPEAT_CONNECT.getCode().equals(code) diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageErrorHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageErrorHandler.java index 66ce7fea..c8086bae 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageErrorHandler.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageErrorHandler.java @@ -1,10 +1,11 @@ package org.dromara.neutrinoproxy.client.sdk.handler; +import cn.hutool.json.JSONObject; +import cn.hutool.json.JSONUtil; import io.netty.channel.ChannelHandlerContext; import lombok.extern.slf4j.Slf4j; import org.dromara.neutrinoproxy.core.*; import org.dromara.neutrinoproxy.core.dispatcher.Match; -import org.noear.snack.ONode; /** * 异常信息处理器 @@ -18,8 +19,8 @@ public class ProxyMessageErrorHandler implements ProxyMessageHandler { @Override public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) { log.info("error: {}", proxyMessage.getInfo()); - ONode load = ONode.load(proxyMessage.getInfo()); - Integer code = load.get("code").getInt(); + JSONObject load = JSONUtil.parseObj(proxyMessage.getInfo()); + Integer code = load.getInt("code"); if (ExceptionEnum.AUTH_FAILED.getCode().equals(code)) { System.exit(0); } diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java index e11ac05d..7363810b 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/ProxyMessageFactory.java @@ -24,20 +24,25 @@ import java.util.List; public abstract class ProxyMessageFactory extends IProxyConfiguration { public abstract void beanInject(String beanName, Object t); - public abstract Object getBean(String beanName); + public abstract Object getBean(String beanName,Class c); + + public abstract void stop(); + public abstract boolean isAotRuntime(); public void start(ProxyConfig proxyConfig){ init(proxyConfig); IAbProxyClientService clientService=new IAbProxyClientService(); clientService.setProxyConfig(proxyConfig); - clientService.setCmdTunnelBootstrap((Bootstrap) getBean("cmdTunnelBootstrap")); - clientService.setUdpServerBootstrap((Bootstrap) getBean("udpServerBootstrap")); + clientService.setCmdTunnelBootstrap((Bootstrap) getBean("cmdTunnelBootstrap",Bootstrap.class)); + clientService.setUdpServerBootstrap((Bootstrap) getBean("udpServerBootstrap",Bootstrap.class)); + clientService.setIsAotRuntime(isAotRuntime()); clientService.init(); } public void init(ProxyConfig proxyConfig){ NioEventLoopGroup tunnelWorkGroup = super.tunnelWorkGroup(proxyConfig); beanInject("tunnelWorkGroup",tunnelWorkGroup); + Object tunnelWorkGroup1 = getBean("tunnelWorkGroup",NioEventLoopGroup.class); NioEventLoopGroup tcpRealServerWorkGroup = super.tcpRealServerWorkGroup(proxyConfig); beanInject("tcpRealServerWorkGroup",tcpRealServerWorkGroup); NioEventLoopGroup udpServerGroup = super.udpServerGroup(proxyConfig); @@ -54,13 +59,13 @@ public abstract class ProxyMessageFactory extends IProxyConfiguration { beanInject("realServerBootstrap",realServerBootstrap); Bootstrap udpServerBootstrap = super.udpServerBootstrap(proxyConfig, udpServerGroup, udpWorkGroup); beanInject("udpServerBootstrap",udpServerBootstrap); - NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar = super.neutrinoCoreRuntimeNativeRegistrar(); - beanInject("neutrinoCoreRuntimeNativeRegistrar",neutrinoCoreRuntimeNativeRegistrar); +// NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar = super.neutrinoCoreRuntimeNativeRegistrar(); +// beanInject("neutrinoCoreRuntimeNativeRegistrar",neutrinoCoreRuntimeNativeRegistrar); dispatcher(proxyConfig, tcpProxyTunnelBootstrap, realServerBootstrap); } public void dispatcher(ProxyConfig proxyConfig, Bootstrap tcpProxyTunnelBootstrap, Bootstrap realServerBootstrap) { List list = Lists.newArrayList( - new ProxyMessageAuthHandler(proxyConfig), + new ProxyMessageAuthHandler(proxyConfig,()->stop()), new ProxyMessageConnectHandler(tcpProxyTunnelBootstrap,realServerBootstrap,proxyConfig), new ProxyMessageDisconnectHandler(), new ProxyMessageErrorHandler(), diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageConnectHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageConnectHandler.java index 81dc9651..03eff2eb 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageConnectHandler.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageConnectHandler.java @@ -1,5 +1,6 @@ package org.dromara.neutrinoproxy.client.sdk.handler; +import cn.hutool.json.JSONUtil; import io.netty.bootstrap.Bootstrap; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; @@ -12,7 +13,6 @@ import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; import org.dromara.neutrinoproxy.core.ProxyMessage; import org.dromara.neutrinoproxy.core.ProxyMessageHandler; import org.dromara.neutrinoproxy.core.dispatcher.Match; -import org.noear.snack.ONode; /** * @author: aoshiguchen @@ -33,7 +33,8 @@ public class UdpProxyMessageConnectHandler implements ProxyMessageHandler { @Override public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) { final Channel cmdChannel = ctx.channel(); - final ProxyMessage.UdpBaseInfo udpBaseInfo = ONode.deserialize(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); + String info = proxyMessage.getInfo(); + final ProxyMessage.UdpBaseInfo udpBaseInfo = JSONUtil.toBean(info,ProxyMessage.UdpBaseInfo.class); log.info("[UDP connect]info:{}", proxyMessage.getInfo()); // 获取连接 diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageTransferHandler.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageTransferHandler.java index 2e97adfa..847284fc 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageTransferHandler.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/handler/UdpProxyMessageTransferHandler.java @@ -1,5 +1,6 @@ package org.dromara.neutrinoproxy.client.sdk.handler; +import cn.hutool.json.JSONUtil; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.Channel; @@ -12,7 +13,6 @@ import org.dromara.neutrinoproxy.core.ProxyDataTypeEnum; import org.dromara.neutrinoproxy.core.ProxyMessage; import org.dromara.neutrinoproxy.core.ProxyMessageHandler; import org.dromara.neutrinoproxy.core.dispatcher.Match; -import org.noear.snack.ONode; import java.net.InetSocketAddress; @@ -26,7 +26,7 @@ public class UdpProxyMessageTransferHandler implements ProxyMessageHandler { @Override public void handle(ChannelHandlerContext ctx, ProxyMessage proxyMessage) { - final ProxyMessage.UdpBaseInfo udpBaseInfo = ONode.deserialize(proxyMessage.getInfo(), ProxyMessage.UdpBaseInfo.class); + final ProxyMessage.UdpBaseInfo udpBaseInfo = JSONUtil.toBean(proxyMessage.getInfo(),ProxyMessage.UdpBaseInfo.class); log.debug("[UDP transfer]info:{} data:{}", proxyMessage.getInfo(), new String(proxyMessage.getData())); Channel channel = UdpServerUtil.takeChannel(udpBaseInfo, ctx.channel()); if (null == channel) { diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/ProxyUtil.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/ProxyUtil.java index 3e28da24..386dfb17 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/ProxyUtil.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/ProxyUtil.java @@ -21,21 +21,20 @@ */ package org.dromara.neutrinoproxy.client.sdk.util; +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelOption; import io.netty.handler.ssl.SslHandler; +import io.netty.util.AttributeKey; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; import org.dromara.neutrinoproxy.client.sdk.core.ProxyChannelBorrowListener; import org.dromara.neutrinoproxy.core.Constants; -import io.netty.bootstrap.Bootstrap; -import io.netty.buffer.Unpooled; -import io.netty.channel.Channel; -import io.netty.channel.ChannelFutureListener; -import io.netty.channel.ChannelOption; -import io.netty.util.AttributeKey; import org.dromara.neutrinoproxy.core.util.FileUtil; -import org.noear.solon.Solon; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLEngine; @@ -180,11 +179,10 @@ public class ProxyUtil { realServerChannels.clear(); } - public static String getClientId() { + public static String getClientId(ProxyConfig proxyConfig) { if (StringUtils.isNotBlank(clientId)) { return clientId; } - ProxyConfig proxyConfig = Solon.context().getBean(ProxyConfig.class); if (StringUtils.isNotBlank(proxyConfig.getTunnel().getClientId())) { clientId = proxyConfig.getTunnel().getClientId(); return clientId; diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/UdpServerUtil.java b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/UdpServerUtil.java index ba909d6d..a907d35e 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/UdpServerUtil.java +++ b/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/util/UdpServerUtil.java @@ -11,7 +11,7 @@ import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; import org.dromara.neutrinoproxy.client.sdk.constant.Constants; import org.dromara.neutrinoproxy.client.sdk.core.CustomThreadFactory; import org.dromara.neutrinoproxy.core.ProxyMessage; -import org.noear.solon.core.runtime.NativeDetector; +import java.util.concurrent.TimeUnit; import java.util.*; import java.util.concurrent.*; @@ -46,9 +46,9 @@ public class UdpServerUtil { * 2、维护一个UDP服务池,用于需要响应的UDP转发 * @param proxyConfig */ - public static void initCache(ProxyConfig proxyConfig, Bootstrap udpServerBootstrap) { + public static void initCache(ProxyConfig proxyConfig, Bootstrap udpServerBootstrap,Boolean isAotRuntime) { // aot 阶段,不初始化UDP服务 - if (NativeDetector.isAotRuntime()) { + if (isAotRuntime) { return; } if (null == proxyConfig.getClient().getUdp() || StringUtils.isEmpty(proxyConfig.getClient().getUdp().getPuppetPortRange())) { diff --git a/neutrino-proxy-client-starter/Dockerfile b/neutrino-proxy-client-starter/Dockerfile new file mode 100644 index 00000000..e2a41943 --- /dev/null +++ b/neutrino-proxy-client-starter/Dockerfile @@ -0,0 +1,16 @@ +FROM openjdk:21-jdk-oracle +#同步时间 +#RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && \ +# apk update && apk add wget unzip vim && apk add -U tzdata && \ +# ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone +# 设置时区为北京时间 +ENV TZ=Asia/Shanghai +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone +RUN mkdir -p /root/neutrino-proxy/config +WORKDIR /root/neutrino-proxy +COPY ./target/neutrino-proxy-client.jar /root/neutrino-proxy/neutrino-proxy-client.jar +COPY ./src/main/resources/app-copy.yml /root/neutrino-proxy/config/app.yml +#VOLUME ["/root/neutrino-proxy"] +ENTRYPOINT ["java","-jar","neutrino-proxy-client.jar","config=./config/app.yml"] + +#docker run -it -d --restart=always --name np_client -e SERVER_IP=127.0.0.1 diff --git a/neutrino-proxy-client-starter/pom.xml b/neutrino-proxy-client-starter/pom.xml new file mode 100644 index 00000000..ef3bebb2 --- /dev/null +++ b/neutrino-proxy-client-starter/pom.xml @@ -0,0 +1,195 @@ + + + + org.noear + solon-parent + 2.5.12 + + + 4.0.0 + io.github.javpower + neutrino-proxy-client-spring-boot-starter + ${revision} + jar + https://github.com/javpower/easy-proxy + + + The Apache Software License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + https://github.com/javpower/easy-proxy + scm:git@github.com/javpower/easy-proxy.git + scm:git@github.com/javpower/easy-proxy.git + + + + gc.x + javpower@163.com + https://github.com/javpower + +8 + + + + 2.3.2 + 2.7.13 + 2.0.1 + + + + org.dromara.neutrino-proxy + neutrino-proxy-client-sdk + ${revision} + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-web + + + org.springframework.boot + spring-boot-starter-test + test + + + org.slf4j + slf4j-api + 1.7.36 + + + + ch.qos.logback + logback-classic + 1.2.12 + + + org.projectlombok + lombok + provided + + + net.dreamlu + mica-auto + ${mica-auto.vaersion} + provided + + + + + + org.springframework.boot + spring-boot-dependencies + ${spring-boot.version} + pom + import + + + + + + + ossrh + https://s01.oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 3.8.1 + + 1.8 + 1.8 + UTF-8 + + + + org.springframework.boot + spring-boot-maven-plugin + ${spring-boot.version} + + com.gc.easy.EasyHttpApplication + true + + + + org.sonatype.plugins + nexus-staging-maven-plugin + 1.6.7 + true + + ossrh + https://s01.oss.sonatype.org/ + true + + + + org.apache.maven.plugins + maven-source-plugin + 2.2.1 + + + attach-sources + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + 2.9.1 + + private + true + UTF-8 + UTF-8 + UTF-8 + -Xdoclint:none + + + + package + + jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + 1.5 + + + sign-artifacts + verify + + sign + + + + + + org.apache.maven.plugins + maven-deploy-plugin + 2.8.2 + + + + + + diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java new file mode 100644 index 00000000..082df470 --- /dev/null +++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/SpringProxyClient.java @@ -0,0 +1,22 @@ +package org.dromara.neutrinoproxy.client.starter; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * @author: gc.x + * @date: 2024/1/21 + */ +@SpringBootApplication +@Slf4j +public class SpringProxyClient { + + public static void main(String[] args) { + SpringApplication.run(SpringProxyClient.class, args); + } + + + + +} diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/MainBusListeners.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/MainBusListeners.java new file mode 100644 index 00000000..7271ca2e --- /dev/null +++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/MainBusListeners.java @@ -0,0 +1,19 @@ +package org.dromara.neutrinoproxy.client.starter.config; + +import org.dromara.neutrinoproxy.client.starter.util.ApplicationContextUtils; +import org.springframework.context.ApplicationListener; +import org.springframework.context.event.ContextRefreshedEvent; +import org.springframework.stereotype.Component; + +/** + * 启动监听 + * @author: gc.x + * @date: 2024/1/21 + */ +@Component +public class MainBusListeners implements ApplicationListener { + @Override + public void onApplicationEvent(ContextRefreshedEvent event) { + ApplicationContextUtils.setContext(event.getApplicationContext()); + } +} \ No newline at end of file diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java new file mode 100644 index 00000000..4e33afec --- /dev/null +++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/ProxyConfiguration.java @@ -0,0 +1,43 @@ +package org.dromara.neutrinoproxy.client.starter.config; + +import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler; +import org.dromara.neutrinoproxy.client.sdk.handler.ProxyMessageFactory; +import org.dromara.neutrinoproxy.client.starter.handler.BeanHandler; +import org.dromara.neutrinoproxy.client.starter.util.ApplicationContextUtils; +import org.springframework.stereotype.Component; + + +/** + * 代理配置 + * @author: aoshiguchen + * @date: 2022/10/8 + */ +@Component +public class ProxyConfiguration extends ProxyMessageFactory { + + + @Override + public IBeanHandler getBeanHandler() { + return new BeanHandler(); + } + + @Override + public void beanInject(String beanName, Object bean) { + ApplicationContextUtils.addBean(beanName,bean); + } + + @Override + public Object getBean(String beanName,Class c) { + return ApplicationContextUtils.getBean(beanName,c); + } + + @Override + public void stop() { + ApplicationContextUtils.stop(); + } + + @Override + public boolean isAotRuntime() { + return false; + } +} diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/SpringProxyConfig.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/SpringProxyConfig.java new file mode 100644 index 00000000..dc3c9117 --- /dev/null +++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/config/SpringProxyConfig.java @@ -0,0 +1,72 @@ +package org.dromara.neutrinoproxy.client.starter.config; + +import lombok.Data; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +/** + * + * @author: gc.x + * @date: 2024/1/21 + */ +@Data +@ConfigurationProperties(prefix = "neutrino.proxy") +@Component +public class SpringProxyConfig { + private Protocol protocol; + private Tunnel tunnel; + private Client client; + + @Data + public static class Protocol { + private Integer maxFrameLength; + private Integer lengthFieldOffset; + private Integer lengthFieldLength; + private Integer initialBytesToStrip; + private Integer lengthAdjustment; + private Integer readIdleTime; + private Integer writeIdleTime; + private Integer allIdleTimeSeconds; + } + + @Data + public static class Tunnel { + private String keyStorePassword; + private String jksPath; + private String serverIp; + private Integer serverPort; + private Boolean sslEnable; + private Integer obtainLicenseInterval; + private String licenseKey; + private Integer threadCount; + private String clientId; + private Boolean transferLogEnable; + private Boolean heartbeatLogEnable; + private Reconnection reconnection; + } + + @Data + public static class Client { +// private Tcp tcp; + private Udp udp; + } + + @Data + public static class Reconnection { + private Integer intervalSeconds; + private Boolean unlimited; + } + + @Data + public static class Tcp { + + } + + @Data + public static class Udp { + private Integer bossThreadCount; + private Integer workThreadCount; + private String puppetPortRange; + private Boolean transferLogEnable; + } +} diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/core/ProxyClientService.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/core/ProxyClientService.java new file mode 100644 index 00000000..dea7bb83 --- /dev/null +++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/core/ProxyClientService.java @@ -0,0 +1,33 @@ +package org.dromara.neutrinoproxy.client.starter.core; + +import cn.hutool.core.bean.BeanUtil; +import lombok.extern.slf4j.Slf4j; +import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; +import org.dromara.neutrinoproxy.client.starter.config.ProxyConfiguration; +import org.dromara.neutrinoproxy.client.starter.config.SpringProxyConfig; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.ApplicationArguments; +import org.springframework.boot.ApplicationRunner; +import org.springframework.stereotype.Component; + +/** + * 代理客户端服务 + * @author: gc.x + * @date: 2024/1/21 + */ +@Slf4j +@Component +public class ProxyClientService implements ApplicationRunner { + + @Autowired + private ProxyConfiguration proxyConfiguration; + @Autowired + private SpringProxyConfig springProxyConfig; + @Override + public void run(ApplicationArguments args) { + log.info("启动中...."); + ProxyConfig proxyConfig = BeanUtil.toBean(springProxyConfig, ProxyConfig.class); + proxyConfiguration.start(proxyConfig); + log.info("启动成功...."); + } +} diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/handler/BeanHandler.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/handler/BeanHandler.java new file mode 100644 index 00000000..1d24fdff --- /dev/null +++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/handler/BeanHandler.java @@ -0,0 +1,31 @@ +package org.dromara.neutrinoproxy.client.starter.handler; + +import cn.hutool.core.bean.BeanUtil; +import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler; +import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; +import org.dromara.neutrinoproxy.client.starter.config.SpringProxyConfig; +import org.dromara.neutrinoproxy.client.starter.util.ApplicationContextUtils; +import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher; + + +/** + * + * @author: gc.x + * @date: 2024/1/21 + */ + +public class BeanHandler implements IBeanHandler { + + + @Override + public Dispatcher getDispatcher(){ + return (Dispatcher) ApplicationContextUtils.getBean("dispatcher"); + } + + @Override + public ProxyConfig getProxyConfig() { + SpringProxyConfig springProxyConfig =ApplicationContextUtils.getBean(SpringProxyConfig.class); + ProxyConfig proxyConfig = BeanUtil.toBean(springProxyConfig, ProxyConfig.class); + return proxyConfig; + } +} diff --git a/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/util/ApplicationContextUtils.java b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/util/ApplicationContextUtils.java new file mode 100644 index 00000000..395c61a0 --- /dev/null +++ b/neutrino-proxy-client-starter/src/main/java/org/dromara/neutrinoproxy/client/starter/util/ApplicationContextUtils.java @@ -0,0 +1,44 @@ +package org.dromara.neutrinoproxy.client.starter.util; + +import org.springframework.beans.factory.support.DefaultListableBeanFactory; +import org.springframework.beans.factory.support.GenericBeanDefinition; +import org.springframework.boot.SpringApplication; +import org.springframework.context.ApplicationContext; + +/** + * ApplicaitonContext工具类 + * @author: gc.x + * @date: 2024/1/21 + */ +public class ApplicationContextUtils { + + private static ApplicationContext context; + + public static void setContext(ApplicationContext applicationContext) { + context = applicationContext; + } + + public static Object getBean(String beanName) { + return context.getBean(beanName); + } + public static void stop(){ + SpringApplication.exit(context); + } + public static T getBean(String beanName,Class t) { + return context.getBean(beanName,t); + } + public static T getBean(Class t) { + return context.getBean(t); + } + + public static void addBean(String beanName,Object bean){ + // 获取BeanFactory + DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getAutowireCapableBeanFactory(); + // 创建Bean信息 + GenericBeanDefinition beanDefinition = new GenericBeanDefinition(); + beanDefinition.setBeanClass(bean.getClass()); + beanDefinition.setInstanceSupplier(() -> bean); + // 注入Bean + beanFactory.registerBeanDefinition(beanName, beanDefinition); + } +} \ No newline at end of file diff --git a/neutrino-proxy-client-starter/src/main/resources/application.yml b/neutrino-proxy-client-starter/src/main/resources/application.yml new file mode 100644 index 00000000..e763c056 --- /dev/null +++ b/neutrino-proxy-client-starter/src/main/resources/application.yml @@ -0,0 +1,52 @@ +server: + port: 8201 +spring: + application: + name: neutrino-proxy-client + +neutrino: + proxy: + protocol: + max-frame-length: 2097152 + length-field-offset: 0 + length-field-length: 4 + initial-bytes-to-strip: 0 + length-adjustment: 0 + read-idle-time: 120 + write-idle-time: 20 + all-idle-time-seconds: 0 + tunnel: + # 线程池相关配置,用于技术调优,可忽略 + thread-count: 50 + # 隧道SSL证书配置 + key-store-password: ${STORE_PASS:123456} + jks-path: ${JKS_PATH:classpath:/test.jks} + # 服务端IP + server-ip: ${SERVER_IP:194.36.209.36} + # 服务端端口(对应服务端app.yml中的tunnel.port、tunnel.ssl-port) + server-port: ${SERVER_PORT:9002} + # 是否启用SSL(注意:该配置必须和server-port对应上) + ssl-enable: ${SSL_ENABLE:true} + # 客户端连接唯一凭证 + license-key: ${LICENSE_KEY:2d45b54680d54726b1cfd183b0307c58} + # 客户端唯一身份标识(可忽略,若不设置首次启动会自动生成) + client-id: ${CLIENT_ID:} + # 是否开启隧道传输报文日志(日志级别为debug时开启才有效) + transfer-log-enable: ${CLIENT_LOG:false} + # 是否开启心跳日志 + heartbeat-log-enable: ${HEARTBEAT_LOG:false} + # 重连设置 + reconnection: + # 重连间隔(秒) + interval-seconds: 10 + # 是否开启无限重连(未开启时,客户端license不合法会自动停止应用,开启了则不会,请谨慎开启) + unlimited: false + client: + udp: + # 线程池相关配置,用于技术调优,可忽略 + boss-thread-count: 5 + work-thread-count: 20 + # udp傀儡端口范围 + puppet-port-range: 10000-10500 + # 是否开启隧道传输报文日志(日志级别为debug时开启才有效) + transfer-log-enable: ${CLIENT_LOG:false} diff --git a/neutrino-proxy-client-starter/src/main/resources/test.jks b/neutrino-proxy-client-starter/src/main/resources/test.jks new file mode 100644 index 00000000..3a4d1ad8 Binary files /dev/null and b/neutrino-proxy-client-starter/src/main/resources/test.jks differ diff --git a/neutrino-proxy-client/pom.xml b/neutrino-proxy-client/pom.xml index a15e1195..1da7952c 100644 --- a/neutrino-proxy-client/pom.xml +++ b/neutrino-proxy-client/pom.xml @@ -19,6 +19,15 @@ neutrino-proxy-client-sdk ${revision} + + org.noear + solon-lib + + + org.noear + solon.aot + + diff --git a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/NeutrinoClientRuntimeNativeRegistrar.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/NeutrinoClientRuntimeNativeRegistrar.java similarity index 93% rename from neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/NeutrinoClientRuntimeNativeRegistrar.java rename to neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/NeutrinoClientRuntimeNativeRegistrar.java index 5b060964..19b825ae 100644 --- a/neutrino-proxy-client-sdk/src/main/java/org/dromara/neutrinoproxy/client/sdk/config/NeutrinoClientRuntimeNativeRegistrar.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/NeutrinoClientRuntimeNativeRegistrar.java @@ -1,5 +1,6 @@ -package org.dromara.neutrinoproxy.client.sdk.config; +package org.dromara.neutrinoproxy.client.config; +import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; import org.noear.solon.annotation.Component; import org.noear.solon.aot.RuntimeNativeMetadata; import org.noear.solon.aot.RuntimeNativeRegistrar; diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/ProxyConfiguration.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/ProxyConfiguration.java index 489bf99d..2c9ae5bc 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/ProxyConfiguration.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/ProxyConfiguration.java @@ -3,9 +3,12 @@ package org.dromara.neutrinoproxy.client.config; import org.dromara.neutrinoproxy.client.handler.BeanHandler; import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler; import org.dromara.neutrinoproxy.client.sdk.handler.ProxyMessageFactory; +import org.dromara.neutrinoproxy.core.aot.NeutrinoCoreRuntimeNativeRegistrar; import org.noear.solon.Solon; +import org.noear.solon.annotation.Bean; import org.noear.solon.annotation.Configuration; import org.noear.solon.core.BeanWrap; +import org.noear.solon.core.runtime.NativeDetector; /** * 代理配置 @@ -30,7 +33,22 @@ public class ProxyConfiguration extends ProxyMessageFactory { } @Override - public Object getBean(String beanName) { + public Object getBean(String beanName,Class c) { return Solon.context().getBean(beanName); } + + @Override + public void stop() { + Solon.stop(); + } + + @Override + public boolean isAotRuntime() { + return NativeDetector.isAotRuntime(); + } + + @Bean + public NeutrinoCoreRuntimeNativeRegistrar neutrinoCoreRuntimeNativeRegistrar(){ + return new NeutrinoCoreRuntimeNativeRegistrar(); + } } diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/SolonProxyConfig.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/SolonProxyConfig.java new file mode 100644 index 00000000..dd1c50af --- /dev/null +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/config/SolonProxyConfig.java @@ -0,0 +1,74 @@ +package org.dromara.neutrinoproxy.client.config; + +import lombok.Data; +import org.noear.solon.annotation.Component; +import org.noear.solon.annotation.Inject; + +/** + * + * @author: aoshiguchen + * @date: 2022/6/16 + */ +@Data +@Component +public class SolonProxyConfig { + @Inject("${neutrino.proxy.protocol}") + private Protocol protocol; + @Inject("${neutrino.proxy.tunnel}") + private Tunnel tunnel; + @Inject("${neutrino.proxy.client}") + private Client client; + + @Data + public static class Protocol { + private Integer maxFrameLength; + private Integer lengthFieldOffset; + private Integer lengthFieldLength; + private Integer initialBytesToStrip; + private Integer lengthAdjustment; + private Integer readIdleTime; + private Integer writeIdleTime; + private Integer allIdleTimeSeconds; + } + + @Data + public static class Tunnel { + private String keyStorePassword; + private String jksPath; + private String serverIp; + private Integer serverPort; + private Boolean sslEnable; + private Integer obtainLicenseInterval; + private String licenseKey; + private Integer threadCount; + private String clientId; + private Boolean transferLogEnable; + private Boolean heartbeatLogEnable; + private Reconnection reconnection; + } + + @Data + public static class Client { +// private Tcp tcp; + private Udp udp; + } + + @Data + public static class Reconnection { + private Integer intervalSeconds; + private Boolean unlimited; + } + + @Data + public static class Tcp { + + } + + @Data + public static class Udp { + private Integer bossThreadCount; + private Integer workThreadCount; + private String puppetPortRange; + private Boolean transferLogEnable; + } +} diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java index e1252d91..f595de8a 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/core/ProxyClientService.java @@ -1,7 +1,9 @@ package org.dromara.neutrinoproxy.client.core; +import cn.hutool.core.bean.BeanUtil; import lombok.extern.slf4j.Slf4j; import org.dromara.neutrinoproxy.client.config.ProxyConfiguration; +import org.dromara.neutrinoproxy.client.config.SolonProxyConfig; import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Init; @@ -18,10 +20,11 @@ public class ProxyClientService{ @Inject private ProxyConfiguration proxyConfiguration; @Inject - private ProxyConfig proxyConfig; + private SolonProxyConfig solonProxyConfig; @Init public void init() { log.info("启动中...."); + ProxyConfig proxyConfig = BeanUtil.toBean(solonProxyConfig, ProxyConfig.class); proxyConfiguration.start(proxyConfig); log.info("启动成功...."); } diff --git a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java index 35b0fd9c..92107bcf 100644 --- a/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java +++ b/neutrino-proxy-client/src/main/java/org/dromara/neutrinoproxy/client/handler/BeanHandler.java @@ -1,13 +1,17 @@ package org.dromara.neutrinoproxy.client.handler; +import cn.hutool.core.bean.BeanUtil; +import org.dromara.neutrinoproxy.client.config.SolonProxyConfig; import org.dromara.neutrinoproxy.client.sdk.config.IBeanHandler; import org.dromara.neutrinoproxy.client.sdk.config.ProxyConfig; import org.dromara.neutrinoproxy.core.dispatcher.Dispatcher; import org.noear.solon.Solon; + public class BeanHandler implements IBeanHandler { + @Override public Dispatcher getDispatcher(){ return Solon.context().getBean("dispatcher"); @@ -15,6 +19,8 @@ public class BeanHandler implements IBeanHandler { @Override public ProxyConfig getProxyConfig() { - return Solon.context().getBean(ProxyConfig.class); + SolonProxyConfig solonProxyConfig = Solon.context().getBean(SolonProxyConfig.class); + ProxyConfig proxyConfig = BeanUtil.toBean(solonProxyConfig, ProxyConfig.class); + return proxyConfig; } } diff --git a/neutrino-proxy-client/src/main/resources/app.yml b/neutrino-proxy-client/src/main/resources/app.yml index a122416c..69d723fe 100644 --- a/neutrino-proxy-client/src/main/resources/app.yml +++ b/neutrino-proxy-client/src/main/resources/app.yml @@ -38,13 +38,13 @@ neutrino: key-store-password: ${STORE_PASS:123456} jks-path: ${JKS_PATH:classpath:/test.jks} # 服务端IP - server-ip: ${SERVER_IP:localhost} + server-ip: ${SERVER_IP:194.36.209.36} # 服务端端口(对应服务端app.yml中的tunnel.port、tunnel.ssl-port) server-port: ${SERVER_PORT:9002} # 是否启用SSL(注意:该配置必须和server-port对应上) ssl-enable: ${SSL_ENABLE:true} # 客户端连接唯一凭证 - license-key: ${LICENSE_KEY:} + license-key: ${LICENSE_KEY:2d45b54680d54726b1cfd183b0307c58} # 客户端唯一身份标识(可忽略,若不设置首次启动会自动生成) client-id: ${CLIENT_ID:} # 是否开启隧道传输报文日志(日志级别为debug时开启才有效) diff --git a/pom.xml b/pom.xml index 70cd80d5..5deba066 100644 --- a/pom.xml +++ b/pom.xml @@ -21,6 +21,7 @@ neutrino-proxy-client neutrino-proxy-server neutrino-proxy-client-sdk + neutrino-proxy-client-starter