diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java index 73644452140..8430f71a9f0 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-common/src/main/java/org/apache/hadoop/yarn/webapp/WebApps.java @@ -83,6 +83,7 @@ public class WebApps { public String name; public String spec; public Map params; + public boolean loadExistingFilters = true; } final String name; @@ -151,12 +152,13 @@ public class WebApps { public Builder withServlet(String name, String pathSpec, Class servlet, - Map params) { + Map params,boolean loadExistingFilters) { ServletStruct struct = new ServletStruct(); struct.clazz = servlet; struct.name = name; struct.spec = pathSpec; struct.params = params; + struct.loadExistingFilters = loadExistingFilters; servlets.add(struct); return this; } @@ -256,9 +258,15 @@ public class WebApps { pathList.add("/" + wsName + "/*"); } } + for (ServletStruct s : servlets) { if (!pathList.contains(s.spec)) { - pathList.add(s.spec); + // The servlet told us to not load-existing filters, but we still want + // to add the default authentication filter always, so add it to the + // pathList + if (!s.loadExistingFilters) { + pathList.add(s.spec); + } } } if (conf == null) { @@ -333,7 +341,7 @@ public class WebApps { HttpServer2 server = builder.build(); for(ServletStruct struct: servlets) { - if (struct.params != null) { + if (!struct.loadExistingFilters) { server.addInternalServlet(struct.name, struct.spec, struct.clazz, struct.params); } else { diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java index c53311127c0..0b7e87cc0b1 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/ResourceManager.java @@ -1111,7 +1111,7 @@ public class ResourceManager extends CompositeService implements Recoverable { "ws") .with(conf) .withServlet("API-Service", "/app/*", - ServletContainer.class, params) + ServletContainer.class, params, false) .withHttpSpnegoPrincipalKey( YarnConfiguration.RM_WEBAPP_SPNEGO_USER_NAME_KEY) .withHttpSpnegoKeytabKey(