== [[JettyUtils]] JettyUtils
JettyUtils is a set of <
[[utility-methods]] .JettyUtils's Utility Methods [cols="1,2",options="header",width="100%"] |=== | Name | Description
| <
| <
| <
| < |
|---|
| === |
=== [[createServletHandler]] Creating ServletContextHandler for Path -- createServletHandler Method
[source, scala]¶
createServletHandler( path: String, servlet: HttpServlet, basePath: String): ServletContextHandler createServletHandlerT <: AnyRef: ServletContextHandler // <1>
<1> Uses the first three-argument createServletHandler
createServletHandler...FIXME
[NOTE]¶
createServletHandler is used when:
-
WebUIis requested to spark-webui-WebUI.md#attachPage[attachPage] -
MetricsServletis requested togetHandlers
* Spark Standalone's WorkerWebUI is requested to initialize¶
=== [[createServlet]] Creating HttpServlet -- createServlet Method
[source, scala]¶
createServletT <: AnyRef: HttpServlet
createServlet creates the X-Frame-Options header that can be either ALLOW-FROM with the value of spark-webui-properties.md#spark.ui.allowFramingFrom[spark.ui.allowFramingFrom] configuration property if defined or SAMEORIGIN.
createServlet creates a Java Servlets HttpServlet with support for GET requests.
When handling GET requests, the HttpServlet first checks view permissions of the remote user (by requesting the SecurityManager to checkUIViewPermissions of the remote user).
[TIP]¶
Enable DEBUG logging level for org.apache.spark.SecurityManager logger to see what happens when SecurityManager does the security check.
Add the following line to conf/log4j.properties:
log4j.logger.org.apache.spark.SecurityManager=DEBUG
You should see the following DEBUG message in the logs:
DEBUG SecurityManager: user=[user] aclsEnabled=[aclsEnabled] viewAcls=[viewAcls] viewAclsGroups=[viewAclsGroups]
¶
DEBUG SecurityManager: user=[user] aclsEnabled=[aclsEnabled] viewAcls=[viewAcls] viewAclsGroups=[viewAclsGroups]
With view permissions check passed, the HttpServlet sends a response with the following:
- FIXME
In case the view permissions didn't allow to view the page, the HttpServlet sends an error response with the following:
-
Status
403 -
Cache-Controlheader with "no-cache, no-store, must-revalidate" -
Error message: "User is not authorized to access this page."
NOTE: createServlet is used exclusively when JettyUtils is requested to <
=== [[createStaticHandler]] Creating Handler For Static Content -- createStaticHandler Method
[source, scala]¶
createStaticHandler(resourceBase: String, path: String): ServletContextHandler¶
createStaticHandler creates a handler for serving files from a static directory
Internally, createStaticHandler creates a Jetty ServletContextHandler and sets org.eclipse.jetty.servlet.Default.gzip init parameter to false.
createRedirectHandler creates a Jetty https://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/servlet/DefaultServlet.html[DefaultServlet].
[NOTE]¶
Quoting the official documentation of Jetty's https://www.eclipse.org/jetty/javadoc/current/org/eclipse/jetty/servlet/DefaultServlet.html[DefaultServlet]:
DefaultServlet The default servlet. This servlet, normally mapped to
/, provides the handling for static content, OPTION and TRACE methods for the context. The following initParameters are supported, these can be set either on the servlet itself or as ServletContext initParameters with a prefix oforg.eclipse.jetty.servlet.Default.
With that, org.eclipse.jetty.servlet.Default.gzip is to configure https://www.eclipse.org/jetty/documentation/current/advanced-extras.html#default-servlet-init[gzip] init parameter for Jetty's DefaultServlet.
gzip If set to true, then static content will be served as gzip content encoded if a matching resource is found ending with ".gz" (default
false) (deprecated: use precompressed)
====
createRedirectHandler resolves the resourceBase in the Spark classloader and, if successful, sets resourceBase init parameter of the Jetty DefaultServlet to the URL.
NOTE: https://www.eclipse.org/jetty/documentation/current/advanced-extras.html#default-servlet-init[resourceBase] init parameter is used to replace the context resource base.
createRedirectHandler requests the ServletContextHandler to use the path as the context path and register the DefaultServlet to serve it.
createRedirectHandler throws an Exception if the input resourceBase could not be resolved.
Could not find resource path for Web UI: [resourceBase]
NOTE: createStaticHandler is used when spark-webui-SparkUI.md#initialize[SparkUI], spark-history-server:HistoryServer.md#initialize[HistoryServer], Spark Standalone's MasterWebUI and WorkerWebUI, Spark on Mesos' MesosClusterUI are requested to initialize.
=== [[createRedirectHandler]] createRedirectHandler Method
[source, scala]¶
createRedirectHandler( srcPath: String, destPath: String, beforeRedirect: HttpServletRequest => Unit = x => (), basePath: String = "", httpMethods: Set[String] = Set("GET")): ServletContextHandler
createRedirectHandler...FIXME
NOTE: createRedirectHandler is used when spark-webui-SparkUI.md#initialize[SparkUI] and Spark Standalone's MasterWebUI are requested to initialize.