2727import java .net .MalformedURLException ;
2828import java .net .URI ;
2929import java .net .URL ;
30+ import java .util .Arrays ;
3031import java .util .ArrayList ;
3132import java .util .Collections ;
3233import java .util .Enumeration ;
6667import org .apache .hadoop .security .SecurityUtil ;
6768import org .apache .hadoop .security .UserGroupInformation ;
6869import org .apache .hadoop .security .authentication .server .AuthenticationFilter ;
70+ import org .apache .hadoop .security .authentication .server .ProxyUserAuthenticationFilterInitializer ;
71+ import org .apache .hadoop .security .authentication .server .PseudoAuthenticationHandler ;
6972import org .apache .hadoop .security .authentication .util .SignerSecretProvider ;
7073import org .apache .hadoop .security .authorize .AccessControlList ;
7174import org .apache .hadoop .security .ssl .SSLFactory ;
9093import org .eclipse .jetty .server .handler .RequestLogHandler ;
9194import org .eclipse .jetty .server .session .AbstractSessionManager ;
9295import org .eclipse .jetty .server .session .SessionHandler ;
93- import org .eclipse .jetty .servlet .DefaultServlet ;
9496import org .eclipse .jetty .servlet .FilterHolder ;
9597import org .eclipse .jetty .servlet .FilterMapping ;
9698import org .eclipse .jetty .servlet .ServletContextHandler ;
@@ -155,7 +157,7 @@ public final class HttpServer2 implements FilterContainer {
155157 // gets stored.
156158 public static final String CONF_CONTEXT_ATTRIBUTE = "hadoop.conf" ;
157159 public static final String ADMINS_ACL = "admins.acl" ;
158- public static final String SPNEGO_FILTER = "SpnegoFilter " ;
160+ public static final String SPNEGO_FILTER = "authentication " ;
159161 public static final String NO_CACHE_FILTER = "NoCacheFilter" ;
160162
161163 public static final String BIND_ADDRESS = "bind.address" ;
@@ -433,7 +435,9 @@ public HttpServer2 build() throws IOException {
433435
434436 HttpServer2 server = new HttpServer2 (this );
435437
436- if (this .securityEnabled ) {
438+ if (this .securityEnabled &&
439+ !this .conf .get (authFilterConfigurationPrefix + "type" ).
440+ equals (PseudoAuthenticationHandler .TYPE )) {
437441 server .initSpnego (conf , hostName , usernameConfKey , keytabConfKey );
438442 }
439443
@@ -608,13 +612,6 @@ private void initializeWebServer(String name, String hostName,
608612 }
609613
610614 addDefaultServlets ();
611-
612- if (pathSpecs != null ) {
613- for (String path : pathSpecs ) {
614- LOG .info ("adding path spec: " + path );
615- addFilterPathMapping (path , webAppContext );
616- }
617- }
618615 }
619616
620617 private void addListener (ServerConnector connector ) {
@@ -625,7 +622,7 @@ private static WebAppContext createWebAppContext(Builder b,
625622 AccessControlList adminsAcl , final String appDir ) {
626623 WebAppContext ctx = new WebAppContext ();
627624 ctx .setDefaultsDescriptor (null );
628- ServletHolder holder = new ServletHolder (new DefaultServlet ());
625+ ServletHolder holder = new ServletHolder (new WebServlet ());
629626 Map <String , String > params = ImmutableMap . <String , String > builder ()
630627 .put ("acceptRanges" , "true" )
631628 .put ("dirAllowed" , "false" )
@@ -684,10 +681,16 @@ private static FilterInitializer[] getFilterInitializers(Configuration conf) {
684681 return null ;
685682 }
686683
687- FilterInitializer [] initializers = new FilterInitializer [classes .length ];
688- for (int i = 0 ; i < classes .length ; i ++) {
684+ List <Class <?>> classList = new ArrayList <>(Arrays .asList (classes ));
685+ if (classList .contains (AuthenticationFilterInitializer .class ) &&
686+ classList .contains (ProxyUserAuthenticationFilterInitializer .class )) {
687+ classList .remove (AuthenticationFilterInitializer .class );
688+ }
689+
690+ FilterInitializer [] initializers = new FilterInitializer [classList .size ()];
691+ for (int i = 0 ; i < classList .size (); i ++) {
689692 initializers [i ] = (FilterInitializer )ReflectionUtils .newInstance (
690- classes [ i ] , conf );
693+ classList . get ( i ) , conf );
691694 }
692695 return initializers ;
693696 }
@@ -735,7 +738,7 @@ protected void addDefaultApps(ContextHandlerCollection parent,
735738 ServletContextHandler staticContext =
736739 new ServletContextHandler (parent , "/static" );
737740 staticContext .setResourceBase (appDir + "/static" );
738- staticContext .addServlet (DefaultServlet .class , "/*" );
741+ staticContext .addServlet (WebServlet .class , "/*" );
739742 staticContext .setDisplayName ("static" );
740743 @ SuppressWarnings ("unchecked" )
741744 Map <String , String > params = staticContext .getInitParams ();
@@ -812,7 +815,6 @@ public void addJerseyResourcePackage(final String packageName,
812815 public void addServlet (String name , String pathSpec ,
813816 Class <? extends HttpServlet > clazz ) {
814817 addInternalServlet (name , pathSpec , clazz , false );
815- addFilterPathMapping (pathSpec , webAppContext );
816818 }
817819
818820 /**
@@ -869,16 +871,6 @@ public void addInternalServlet(String name, String pathSpec,
869871 }
870872 }
871873 webAppContext .addServlet (holder , pathSpec );
872-
873- if (requireAuth && UserGroupInformation .isSecurityEnabled ()) {
874- LOG .info ("Adding Kerberos (SPNEGO) filter to " + name );
875- ServletHandler handler = webAppContext .getServletHandler ();
876- FilterMapping fmap = new FilterMapping ();
877- fmap .setPathSpec (pathSpec );
878- fmap .setFilterName (SPNEGO_FILTER );
879- fmap .setDispatches (FilterMapping .ALL );
880- handler .addFilterMapping (fmap );
881- }
882874 }
883875
884876 /**
@@ -945,8 +937,8 @@ public void addFilter(String name, String classname,
945937 Map <String , String > parameters ) {
946938
947939 FilterHolder filterHolder = getFilterHolder (name , classname , parameters );
948- final String [] USER_FACING_URLS = { "*.html " , "*.jsp " };
949- FilterMapping fmap = getFilterMapping (name , USER_FACING_URLS );
940+ final String [] userFacingUrls = {"/ " , "/* " };
941+ FilterMapping fmap = getFilterMapping (name , userFacingUrls );
950942 defineFilter (webAppContext , filterHolder , fmap );
951943 LOG .info (
952944 "Added filter " + name + " (class=" + classname + ") to context "
0 commit comments