Search in sources :

Example 1 with VxApiCertOptions

use of com.szmirren.vxApi.core.options.VxApiCertOptions in project VX-API-Gateway by EliMirren.

the class VxApiApplication method createHttpsServer.

/**
 * 创建https服务器
 *
 * @param createHttp
 */
public void createHttpsServer(Handler<AsyncResult<Void>> createHttps) {
    this.httpsRouter = Router.router(vertx);
    httpsRouter.route().handler(this::filterBlackIP);
    httpsRouter.route().handler(CookieHandler.create());
    SessionStore sessionStore = null;
    if (vertx.isClustered()) {
        sessionStore = ClusteredSessionStore.create(vertx);
    } else {
        sessionStore = LocalSessionStore.create(vertx);
    }
    SessionHandler sessionHandler = SessionHandler.create(sessionStore);
    sessionHandler.setSessionCookieName(appOption.getSessionCookieName());
    sessionHandler.setSessionTimeout(appOption.getSessionTimeOut());
    httpsRouter.route().handler(sessionHandler);
    httpsRouter.route().handler(BodyHandler.create().setUploadsDirectory("../temp/file-uploads").setBodyLimit(appOption.getContentLength()));
    // 跨域处理
    if (corsOptions != null) {
        CorsHandler corsHandler = CorsHandler.create(corsOptions.getAllowedOrigin());
        corsHandler.allowedHeaders(corsOptions.getAllowedHeaders()).allowCredentials(corsOptions.isAllowCredentials()).exposedHeaders(corsOptions.getExposedHeaders()).allowedMethods(corsOptions.getAllowedMethods()).maxAgeSeconds(corsOptions.getMaxAgeSeconds());
        httpsRouter.route().handler(corsHandler);
    }
    // 创建https服务器
    serverOptions.setSsl(true);
    VxApiCertOptions certOptions = serverOptions.getCertOptions();
    if (certOptions.getCertType().equalsIgnoreCase("pem")) {
        serverOptions.setPemKeyCertOptions(new PemKeyCertOptions().setCertPath(certOptions.getCertPath()).setKeyPath(certOptions.getCertKey()));
    } else if (certOptions.getCertType().equalsIgnoreCase("pfx")) {
        serverOptions.setPfxKeyCertOptions(new PfxOptions().setPath(certOptions.getCertPath()).setPassword(certOptions.getCertKey()));
    } else {
        LOG.error("创建https服务器-->失败:无效的证书类型,只支持pem/pfx格式的证书");
        createHttps.handle(Future.failedFuture("创建https服务器-->失败:无效的证书类型,只支持pem/pfx格式的证书"));
        return;
    }
    Future<Boolean> createFuture = Future.future();
    vertx.fileSystem().exists(certOptions.getCertPath(), createFuture);
    createFuture.setHandler(check -> {
        if (check.succeeded()) {
            if (check.result()) {
                // 404页面
                httpsRouter.route().order(999999).handler(rct -> {
                    HttpServerResponse response = rct.response();
                    if (appOption.getNotFoundContentType() != null) {
                        response.putHeader("Content-Type", appOption.getNotFoundContentType());
                    }
                    response.end(appOption.getNotFoundResult());
                });
                // 如果在linux系统开启epoll
                if (vertx.isNativeTransportEnabled()) {
                    serverOptions.setTcpFastOpen(true).setTcpCork(true).setTcpQuickAck(true).setReusePort(true);
                }
                vertx.createHttpServer(serverOptions).requestHandler(httpsRouter::accept).listen(serverOptions.getHttpsPort(), res -> {
                    if (res.succeeded()) {
                        System.out.println(appOption.getAppName() + " Running on port " + serverOptions.getHttpsPort() + " by HTTPS");
                        createHttps.handle(Future.succeededFuture());
                    } else {
                        System.out.println("create HTTPS Server failed : " + res.cause());
                        createHttps.handle(Future.failedFuture(res.cause()));
                    }
                });
            } else {
                LOG.error("执行创建https服务器-->失败:无效的证书或者错误的路径:如果证书存放在conf/cert中,路径可以从cert/开始,示例:cert/XXX.XXX");
                createHttps.handle(Future.failedFuture("无效的证书或者错误的路径"));
            }
        } else {
            LOG.error("执行创建https服务器-->失败:无效的证书或者错误的路径:如果证书存放在conf/cert中,路径可以从cert/开始,示例:cert/XXX.XXX", check.cause());
            createHttps.handle(Future.failedFuture(check.cause()));
        }
    });
}
Also used : ClusteredSessionStore(io.vertx.ext.web.sstore.ClusteredSessionStore) SessionStore(io.vertx.ext.web.sstore.SessionStore) LocalSessionStore(io.vertx.ext.web.sstore.LocalSessionStore) SessionHandler(io.vertx.ext.web.handler.SessionHandler) PemKeyCertOptions(io.vertx.core.net.PemKeyCertOptions) HttpServerResponse(io.vertx.core.http.HttpServerResponse) CorsHandler(io.vertx.ext.web.handler.CorsHandler) VxApiCertOptions(com.szmirren.vxApi.core.options.VxApiCertOptions) PfxOptions(io.vertx.core.net.PfxOptions)

Aggregations

VxApiCertOptions (com.szmirren.vxApi.core.options.VxApiCertOptions)1 HttpServerResponse (io.vertx.core.http.HttpServerResponse)1 PemKeyCertOptions (io.vertx.core.net.PemKeyCertOptions)1 PfxOptions (io.vertx.core.net.PfxOptions)1 CorsHandler (io.vertx.ext.web.handler.CorsHandler)1 SessionHandler (io.vertx.ext.web.handler.SessionHandler)1 ClusteredSessionStore (io.vertx.ext.web.sstore.ClusteredSessionStore)1 LocalSessionStore (io.vertx.ext.web.sstore.LocalSessionStore)1 SessionStore (io.vertx.ext.web.sstore.SessionStore)1