|
@@ -19,21 +19,16 @@
|
|
|
package org.apache.ambari.server.controller;
|
|
|
|
|
|
|
|
|
-import java.io.File;
|
|
|
-import java.io.IOException;
|
|
|
-import java.net.Authenticator;
|
|
|
-import java.net.BindException;
|
|
|
-import java.net.PasswordAuthentication;
|
|
|
-import java.net.URL;
|
|
|
-import java.util.EnumSet;
|
|
|
-import java.util.Enumeration;
|
|
|
-import java.util.HashMap;
|
|
|
-import java.util.Map;
|
|
|
-import java.util.logging.LogManager;
|
|
|
-
|
|
|
-import javax.crypto.BadPaddingException;
|
|
|
-import javax.servlet.DispatcherType;
|
|
|
-
|
|
|
+import com.google.common.util.concurrent.ServiceManager;
|
|
|
+import com.google.gson.Gson;
|
|
|
+import com.google.inject.Guice;
|
|
|
+import com.google.inject.Inject;
|
|
|
+import com.google.inject.Injector;
|
|
|
+import com.google.inject.Scopes;
|
|
|
+import com.google.inject.Singleton;
|
|
|
+import com.google.inject.name.Named;
|
|
|
+import com.google.inject.persist.Transactional;
|
|
|
+import com.sun.jersey.spi.container.servlet.ServletContainer;
|
|
|
import org.apache.ambari.eventdb.webservice.WorkflowJsonService;
|
|
|
import org.apache.ambari.server.AmbariException;
|
|
|
import org.apache.ambari.server.StateRecoveryManager;
|
|
@@ -99,9 +94,9 @@ import org.apache.ambari.server.security.CertificateManager;
|
|
|
import org.apache.ambari.server.security.SecurityFilter;
|
|
|
import org.apache.ambari.server.security.authentication.AmbariAuthenticationFilter;
|
|
|
import org.apache.ambari.server.security.authorization.AmbariAuthorizationFilter;
|
|
|
+import org.apache.ambari.server.security.authorization.AmbariLdapAuthenticationProvider;
|
|
|
import org.apache.ambari.server.security.authorization.AmbariLocalUserProvider;
|
|
|
import org.apache.ambari.server.security.authorization.AmbariUserAuthorizationFilter;
|
|
|
-import org.apache.ambari.server.security.authorization.AmbariLdapAuthenticationProvider;
|
|
|
import org.apache.ambari.server.security.authorization.PermissionHelper;
|
|
|
import org.apache.ambari.server.security.authorization.Users;
|
|
|
import org.apache.ambari.server.security.authorization.internal.AmbariInternalAuthenticationProvider;
|
|
@@ -120,6 +115,7 @@ import org.apache.ambari.server.utils.AmbariPath;
|
|
|
import org.apache.ambari.server.utils.RetryHelper;
|
|
|
import org.apache.ambari.server.utils.StageUtils;
|
|
|
import org.apache.ambari.server.utils.VersionUtils;
|
|
|
+import org.apache.ambari.server.view.AmbariViewsMDCLoggingFilter;
|
|
|
import org.apache.ambari.server.view.ViewDirectoryWatcher;
|
|
|
import org.apache.ambari.server.view.ViewRegistry;
|
|
|
import org.apache.ambari.server.view.ViewThrottleFilter;
|
|
@@ -152,19 +148,23 @@ import org.springframework.web.context.request.RequestContextListener;
|
|
|
import org.springframework.web.context.support.GenericWebApplicationContext;
|
|
|
import org.springframework.web.filter.DelegatingFilterProxy;
|
|
|
|
|
|
-import com.google.common.util.concurrent.ServiceManager;
|
|
|
-import com.google.gson.Gson;
|
|
|
-import com.google.inject.Guice;
|
|
|
-import com.google.inject.Inject;
|
|
|
-import com.google.inject.Injector;
|
|
|
-import com.google.inject.Scopes;
|
|
|
-import com.google.inject.Singleton;
|
|
|
-import com.google.inject.name.Named;
|
|
|
-import com.google.inject.persist.Transactional;
|
|
|
-import com.sun.jersey.spi.container.servlet.ServletContainer;
|
|
|
+import javax.crypto.BadPaddingException;
|
|
|
+import javax.servlet.DispatcherType;
|
|
|
+import java.io.File;
|
|
|
+import java.io.IOException;
|
|
|
+import java.net.Authenticator;
|
|
|
+import java.net.BindException;
|
|
|
+import java.net.PasswordAuthentication;
|
|
|
+import java.net.URL;
|
|
|
+import java.util.EnumSet;
|
|
|
+import java.util.Enumeration;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+import java.util.logging.LogManager;
|
|
|
|
|
|
@Singleton
|
|
|
public class AmbariServer {
|
|
|
+ public static final String VIEWS_URL_PATTERN = "/api/v1/views/*";
|
|
|
private static Logger LOG = LoggerFactory.getLogger(AmbariServer.class);
|
|
|
|
|
|
/**
|
|
@@ -382,14 +382,18 @@ public class AmbariServer {
|
|
|
|
|
|
// The security header filter - conditionally adds security-related headers to the HTTP response for Ambari Views
|
|
|
// requests.
|
|
|
- root.addFilter(new FilterHolder(injector.getInstance(AmbariViewsSecurityHeaderFilter.class)), "/api/v1/views/*",
|
|
|
+ root.addFilter(new FilterHolder(injector.getInstance(AmbariViewsSecurityHeaderFilter.class)), VIEWS_URL_PATTERN,
|
|
|
DISPATCHER_TYPES);
|
|
|
|
|
|
// since views share the REST API threadpool, a misbehaving view could
|
|
|
// consume all of the available threads and effectively cause a loss of
|
|
|
// service for Ambari
|
|
|
root.addFilter(new FilterHolder(injector.getInstance(ViewThrottleFilter.class)),
|
|
|
- "/api/v1/views/*", DISPATCHER_TYPES);
|
|
|
+ VIEWS_URL_PATTERN, DISPATCHER_TYPES);
|
|
|
+
|
|
|
+ // adds MDC info for views logging
|
|
|
+ root.addFilter(new FilterHolder(injector.getInstance(AmbariViewsMDCLoggingFilter.class)),
|
|
|
+ VIEWS_URL_PATTERN, DISPATCHER_TYPES);
|
|
|
|
|
|
// session-per-request strategy for api
|
|
|
root.addFilter(new FilterHolder(injector.getInstance(AmbariPersistFilter.class)), "/api/*", DISPATCHER_TYPES);
|