How to disable directory listing for Jetty's We...

I'm embedding Jetty (version 7.4.5.v20110725) into a java application. I'm serving JSP pages in ./webapps/jsp/ using Jetty's WebAppContext, but if I visit localhost:8080/jsp/ I get Jetty's directory listing for the entire contents of ./webapps/jsp/. I've tried setting the dirAllowed parameter to false on the WebAppContext and it does not change the directory listing behavior. html

Disabling the directory listing on a ResourceHandler is simply done be passing false to setDirectoriesListed, works as expected. Can someone tell me how to do this for the WebAppContext? java

import org.eclipse.jetty.server.Handler;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.ContextHandler;
import org.eclipse.jetty.server.handler.HandlerList;
import org.eclipse.jetty.server.handler.ResourceHandler;
import org.eclipse.jetty.server.nio.SelectChannelConnector;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.servlet.ServletHolder;
import org.eclipse.jetty.webapp.WebAppContext;

public class Test {

    public static void main(String[] args) throws Exception {
        Server server = new Server();
        SelectChannelConnector connector = new SelectChannelConnector();
        connector.setHost("127.0.0.1");
        connector.setPort(8080);
        server.addConnector(connector);

        // Create a resource handler for static content.
        ResourceHandler staticResourceHandler = new ResourceHandler();
        staticResourceHandler.setResourceBase("./webapps/static/");
        staticResourceHandler.setDirectoriesListed(false);

        // Create context handler for static resource handler.
        ContextHandler staticContextHandler = new ContextHandler();
        staticContextHandler.setContextPath("/static");
        staticContextHandler.setHandler(staticResourceHandler);

        // Create WebAppContext for JSP files.
        WebAppContext webAppContext = new WebAppContext();
        webAppContext.setContextPath("/jsp");
        webAppContext.setResourceBase("./webapps/jsp/");
        // ??? THIS DOES NOT STOP DIR LISTING OF ./webapps/jsp/ ???
        webAppContext.setInitParameter("dirAllowed", "false");

        // Create a handler list to store our static and servlet context handlers.
        HandlerList handlers = new HandlerList();
        handlers.setHandlers(new Handler[] { staticContextHandler, webAppContext });

        // Add the handlers to the server and start jetty.
        server.setHandler(handlers);
        server.start();
        server.join();
    }

}



You can set "org.eclipse.jetty.servlet.Default.dirAllowed" instead of "dirAllowed": web

webAppContext.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false"); app

Tested for Jetty 7.4.5.v20110725. eclipse




I found the following page on the net which describes the same problem: webapp

jetty-users-How-can-I-prevent-Directory-Listing-in-WebAppContext jsp

I quote what is mentioned in one of the entries in that post as reason for the problem: post

the problem is that for some reason Jetty does not merge the webdefault.xml with user web.xml properly when embedded mode is used ui

and following is the code that was used to overcome the problem: this

HashMap hmap = new HashMap<String, String>();   hmap.put("dirAllowed", "false");   hmap.put("redirectWelcome", "false");  hmap.put("aliases", "false");  ServletHolder []svh = wc.getServletHandler().getServlets();   if(svh != null && svh.length > 0) {  for(int j = 0; j < svh.length; j++) { ServletHolder svh1 = svh[j]; if(svh1.getClassName() != null && svh1.getClassName().endsWith(DEFAULT_SERVLET))  { svh1.setInitParameters(hmap);  }  } } 


Unfortunately it didn't help:ServletHolder[] svh = webAppContext.getServletHandler().getServlets();returns a zero length array. – phatypus Aug 28 '11



If anyone happens across this looking for the equivalent in Jetty 6:

<bean id="webAppContext" class="org.mortbay.jetty.webapp.WebAppContext">  . . <property name="initParams"> <map>  <entry key="org.mortbay.jetty.servlet.Default.dirAllowed" value="false" />   </map>  </property> 
相關文章
相關標籤/搜索