diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/enhance/SslContextManager.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/enhance/SslContextManager.java index 4edea6c4..f45ede72 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/enhance/SslContextManager.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/proxy/enhance/SslContextManager.java @@ -8,12 +8,16 @@ import io.netty.handler.ssl.SslContextBuilder; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.solon.annotation.Db; +import org.dromara.neutrinoproxy.server.base.db.DBInitialize; import org.dromara.neutrinoproxy.server.dal.DomainMapper; import org.dromara.neutrinoproxy.server.dal.entity.DomainNameDO; import org.dromara.neutrinoproxy.server.util.ProxyUtil; import org.noear.solon.annotation.Component; +import org.noear.solon.annotation.Init; +import org.noear.solon.annotation.Inject; import org.noear.solon.core.event.AppLoadEndEvent; import org.noear.solon.core.event.EventListener; +import org.noear.solon.core.runtime.NativeDetector; import javax.net.ssl.KeyManagerFactory; import java.io.ByteArrayInputStream; @@ -35,17 +39,30 @@ public class SslContextManager implements EventListener { @Db private DomainMapper domainMapper; + @Inject + private DBInitialize dbInitialize; + // 初始化时加载所有域名的 SSL 上下文 - @Override - public void onEvent(AppLoadEndEvent appLoadEndEvent) throws Throwable { + @Init + public void init() throws Throwable { + // aot 阶段,不初始化 + if (NativeDetector.isAotRuntime()) { + return; + } try { initializeSslContexts(); } catch (Exception e) { log.error("initialize SSL handler failed", e); - e.printStackTrace(); + throw e; } } + + @Override + public void onEvent(AppLoadEndEvent appLoadEndEvent) throws Throwable { + + } + // 维护域名到 SslContext 的映射 private final ConcurrentHashMap domainSslContexts = new ConcurrentHashMap<>(); diff --git a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/DomainService.java b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/DomainService.java index f5a826ca..9caf383f 100644 --- a/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/DomainService.java +++ b/neutrino-proxy-server/src/main/java/org/dromara/neutrinoproxy/server/service/DomainService.java @@ -15,7 +15,10 @@ import org.dromara.neutrinoproxy.server.base.page.PageInfo; import org.dromara.neutrinoproxy.server.base.page.PageQuery; import org.dromara.neutrinoproxy.server.base.rest.SystemContextHolder; import org.dromara.neutrinoproxy.server.constant.*; -import org.dromara.neutrinoproxy.server.controller.req.proxy.*; +import org.dromara.neutrinoproxy.server.controller.req.proxy.DomainCreateReq; +import org.dromara.neutrinoproxy.server.controller.req.proxy.DomainListReq; +import org.dromara.neutrinoproxy.server.controller.req.proxy.DomainUpdateEnableStatusReq; +import org.dromara.neutrinoproxy.server.controller.req.proxy.DomainUpdateReq; import org.dromara.neutrinoproxy.server.controller.res.proxy.DomainListRes; import org.dromara.neutrinoproxy.server.controller.res.proxy.DomainUpdateDefaultStatusRes; import org.dromara.neutrinoproxy.server.controller.res.proxy.DomainUpdateEnableStatusRes; @@ -34,6 +37,7 @@ import org.noear.solon.annotation.Component; import org.noear.solon.annotation.Init; import org.noear.solon.annotation.Inject; import org.noear.solon.core.handle.UploadedFile; +import org.noear.solon.core.runtime.NativeDetector; import java.io.ByteArrayOutputStream; import java.io.IOException; @@ -61,7 +65,6 @@ public class DomainService { @Inject private SslContextManager sslContextManager; - public PageInfo page(PageQuery pageQuery, DomainListReq req) { Page page = domainMapper.selectPage(new Page<>(pageQuery.getCurrent(), pageQuery.getSize()), new LambdaQueryWrapper() .eq(req.getEnable() != null, DomainNameDO::getEnable, req.getEnable()) @@ -254,6 +257,10 @@ public class DomainService { @Init public void init() { + // aot 阶段,不初始化 + if (NativeDetector.isAotRuntime()) { + return; + } List fullDomainNameBOS = domainMapper.selectFullDomainNameList(); if (CollectionUtil.isEmpty(fullDomainNameBOS)) { return;