I try to enable directory listing in Spring Boot v2.7.0 with embedded Jetty by implementing a WebServerFactoryCustomizer:
public class MyJettyWebServerCustomizer implements WebServerFactoryCustomizer<JettyServletWebServerFactory> {
@Override
public void customize(JettyServletWebServerFactory factory) {
JettyServerCustomizer jettyServerCustomizer = new JettyServerCustomizer() {
@Override
public void customize(Server server) {
Handler[] childHandlersByClass = server.getChildHandlersByClass(WebAppContext.class);
final WebAppContext webAppContext = (WebAppContext) childHandlersByClass[0];
ServletHandler handler = webAppContext.getServletHandler();
ServletHolder defServlet = ((WebAppContext)server.getHandlers()[0]).getServletHandler().getServlets()[0];
defServlet.setInitParameter("dirAllowed","true");
defServlet.setInitParameter("resourceBase","/tmp/");
webAppContext.getServletHandler().addServletWithMapping(defServlet, "/foo");
webAppContext.getServletHandler().getServletMapping("/foo").setDefault(true);
}
};
factory.addServerCustomizers(jettyServerCustomizer);
}
}
But requesting http://localhost:8080/foo
returns a 404. Creating a new Default Servlet does also not work:
ServletHolder holder = new ServletHolder();
holder.setName("default");
holder.setClassName("org.eclipse.jetty.servlet.DefaultServlet");
holder.setInitParameter("dirAllowed", "true");
holder.setInitOrder(1);
webAppContext.getServletHandler().addServletWithMapping(holder, "/foo");
webAppContext.getServletHandler().getServletMapping("/foo").setDefault(true);
Did I fundamentally misunderstand something or did I miss something else like another configuration?