From b845f1165c114744100402b29583fbe7b1765e04 Mon Sep 17 00:00:00 2001 From: senmiaoliu Date: Mon, 15 Apr 2024 11:10:38 +0800 Subject: [PATCH] disable web ui --- .../org/apache/kyuubi/config/KyuubiConf.scala | 7 +++++ .../server/KyuubiRestFrontendService.scala | 7 +++++ .../apache/kyuubi/server/ui/JettyUtils.scala | 21 ++++++++++++++ kyuubi-server/web-ui/public/enable.html | 29 +++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 kyuubi-server/web-ui/public/enable.html diff --git a/kyuubi-common/src/main/scala/org/apache/kyuubi/config/KyuubiConf.scala b/kyuubi-common/src/main/scala/org/apache/kyuubi/config/KyuubiConf.scala index 6de0af9155e..ba336a0216b 100644 --- a/kyuubi-common/src/main/scala/org/apache/kyuubi/config/KyuubiConf.scala +++ b/kyuubi-common/src/main/scala/org/apache/kyuubi/config/KyuubiConf.scala @@ -626,6 +626,13 @@ object KyuubiConf { .timeConf .createWithDefaultString("PT5S") + val FRONTEND_REST_ENABLE_WEBUI: ConfigEntry[Boolean] = + buildConf("kyuubi.frontend.rest.enable.webui") + .doc("If set to false then web ui will disabled when RESTful protocol is enabled") + .version("1.10.0") + .booleanConf + .createWithDefault(true) + val FRONTEND_WORKER_KEEPALIVE_TIME: ConfigEntry[Long] = buildConf("kyuubi.frontend.worker.keepalive.time") .doc("(deprecated) Keep-alive time (in milliseconds) for an idle worker thread") diff --git a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiRestFrontendService.scala b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiRestFrontendService.scala index a3dd4038995..bf880612d32 100644 --- a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiRestFrontendService.scala +++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/KyuubiRestFrontendService.scala @@ -116,6 +116,13 @@ class KyuubiRestFrontendService(override val serverable: Serverable) } private def installWebUI(): Unit = { + if (!conf.get(FRONTEND_REST_ENABLE_WEBUI)) { + val filterHolder = new FilterHolder(JettyUtils.createFilter("/enable.html")) + val servletHandler = JettyUtils.createStaticHandler("dist", "/") + servletHandler.addFilter(filterHolder, "/*", null) + server.addHandler(servletHandler) + return + } // redirect root path to Web UI home page server.addRedirectHandler("/", "/ui") diff --git a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/ui/JettyUtils.scala b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/ui/JettyUtils.scala index f93f89a9580..6844ee23114 100644 --- a/kyuubi-server/src/main/scala/org/apache/kyuubi/server/ui/JettyUtils.scala +++ b/kyuubi-server/src/main/scala/org/apache/kyuubi/server/ui/JettyUtils.scala @@ -18,6 +18,7 @@ package org.apache.kyuubi.server.ui import java.net.URL +import javax.servlet.{Filter, FilterChain, FilterConfig, ServletRequest, ServletResponse} import javax.servlet.http.{HttpServlet, HttpServletRequest, HttpServletResponse} import org.eclipse.jetty.servlet.{DefaultServlet, ServletContextHandler, ServletHolder} @@ -87,4 +88,24 @@ private[kyuubi] object JettyUtils { createServletHandler(src, redirectedServlet) } + + def createFilter(targetPage: String): Filter = new Filter { + override def init(filterConfig: FilterConfig): Unit = {} + + override def doFilter( + request: ServletRequest, + response: ServletResponse, + chain: FilterChain): Unit = { + val httpRequest = request.asInstanceOf[HttpServletRequest] + val httpResponse = response.asInstanceOf[HttpServletResponse] + val requestURI = httpRequest.getRequestURI + if (requestURI != targetPage) { + httpResponse.sendRedirect(httpRequest.getContextPath + targetPage) + } else { + chain.doFilter(request, response) + } + } + + override def destroy(): Unit = {} + } } diff --git a/kyuubi-server/web-ui/public/enable.html b/kyuubi-server/web-ui/public/enable.html new file mode 100644 index 00000000000..91083ae9390 --- /dev/null +++ b/kyuubi-server/web-ui/public/enable.html @@ -0,0 +1,29 @@ + + + + + + + Apache Kyuubi + + +

🙁 The Web UI is currently unavailable.

+

👉 To enable Web UI, set kyuubi.frontend.rest.enable.webui true.

+ +