RANGER-3342 : Need to make the Ranger embedded server work directory configurable

Issue:
Currently the work directory for Ranger embedded server is not configurable. Need to make the work directory configurable to a custom location so that user can customize if required.

Changes:
Added configuration to make the work directory configurable for the embedded server.

Testing:
Validated changes locally.

Signed-off-by: Nitin Galave <ni3galave@apache.org>
diff --git a/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/EmbeddedServer.java b/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/EmbeddedServer.java
index 1371682..d3b1084 100644
--- a/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/EmbeddedServer.java
+++ b/embeddedwebserver/src/main/java/org/apache/ranger/server/tomcat/EmbeddedServer.java
@@ -37,15 +37,16 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
-import org.apache.catalina.Context;
 import org.apache.catalina.LifecycleException;
 import org.apache.catalina.connector.Connector;
+import org.apache.catalina.core.StandardContext;
 import org.apache.catalina.startup.Tomcat;
 import org.apache.catalina.valves.AccessLogValve;
 import org.apache.catalina.valves.ErrorReportValve;
 import org.apache.commons.lang.StringUtils;
 import org.apache.hadoop.security.SecureClientLogin;
 import org.apache.log4j.PropertyConfigurator;
+
 import org.apache.ranger.credentialapi.CredentialReader;
 
 import javax.net.ssl.KeyManager;
@@ -259,8 +260,17 @@
 			}
 			LOG.info("Adding webapp [" + webContextName + "] = path ["
 					+ webapp_dir + "] .....");
-			Context webappCtx = server.addWebapp(webContextName, new File(
-					webapp_dir).getAbsolutePath());
+                       StandardContext webappCtx = (StandardContext) server.addWebapp(webContextName, new File(
+                           webapp_dir).getAbsolutePath());
+                       String workDirPath = EmbeddedServerUtil.getConfig("ranger.tomcat.work.dir", "");
+                       if (!workDirPath.isEmpty() && new File(workDirPath).exists()) {
+                           webappCtx.setWorkDir(workDirPath);
+                       } else {
+                            if (LOG.getLevel().equals(Level.FINE)) {
+                                LOG.fine("Skipping to set tomcat server work directory, '" + workDirPath +
+                                    "', as it is blank or directory does not exist.");
+                            }
+                       }
 			webappCtx.init();
 			LOG.info("Finished init of webapp [" + webContextName
 					+ "] = path [" + webapp_dir + "].");
diff --git a/security-admin/src/main/resources/conf.dist/ranger-admin-default-site.xml b/security-admin/src/main/resources/conf.dist/ranger-admin-default-site.xml
index 8842071..5ffeb02 100644
--- a/security-admin/src/main/resources/conf.dist/ranger-admin-default-site.xml
+++ b/security-admin/src/main/resources/conf.dist/ranger-admin-default-site.xml
@@ -615,4 +615,8 @@
 			<name>ranger.default.browser-useragents</name>
 			<value>Mozilla,Opera,Chrome</value>
 	   </property>
+          <property>
+            <name>ranger.tomcat.work.dir</name>
+            <value></value>
+          </property>
 </configuration>