当前位置: 首页 > 面试题库 >

如何禁用Jetty的WebAppContext的目录列表?

司空镜
2023-03-14
问题内容

我将Jetty(版本7.4.5.v20110725)嵌入到Java应用程序中。我正在使用Jetty的WebAppContext在./webapps/jsp/中提供JSP页面,但是如果我访问localhost:8080
/ jsp
/,则会得到Jetty的目录列表,其中包含./webapps/jsp/的全部内容。我尝试在WebAppContext上将dirAllowed参数设置为false,并且它不会更改目录列表的行为。

只需将false传递给setDirectoriesListed即可完成在ResourceHandler上禁用目录列表的操作,按预期方式进行。有人可以告诉我如何针对WebAppContext执行此操作吗?

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();
    }

}

问题答案:

您可以设置org.eclipse.jetty.servlet.Default.dirAllowed而不是dirAllowed

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

经过Jetty 7.4.5.v20110725、8.1.4.v20120524、9.0.0.2.v20130417和9.2.0.v20140526的测试。



 类似资料:
  • 我尝试使用: Java11 RestEasy 4.1.0最终版 码头9.4.19. v20190610 gretty-gradle-plugin来自https://raw.github.com/gretty-gradle-plugin/gretty/master/pluginScripts/gretty.plugin 使用下面的子项目构建。格雷德尔: 但是,当我试图运行我的服务器使用:我得到以下异

  • 我正在寻找在嵌入式Jetty WebAppContext contextPath中的通配符支持,但无法找到任何。我有以下代码为我的购物WebApp: 我希望,如果访问http://ip:port/shopping/任何东西,它应该加载我上面的WebApp。但事实并非如此。我也尝试了path=“/shopping/*”,但它也不起作用。 这里有人能帮助我吗,如果它可能或不可能,或者我在这里做错了什么

  • 问题内容: 假设我有一个URL:我想获得目录下所有文件/目录的列表。 我正在使用Java 5。 我可以使用此程序http://www.httrack.com/获得dir的列表,但是使用Java我不知道是否可行。 有谁知道如何用Java获得它?或者,如果Java无法执行,该程序将如何完成工作? 问题答案: 有一些条件: 服务器必须已启用目录列表,以便您查看其内容。 我没有办法(没有API或HTTP动

  • 所有其他3DES密码都消失了,除了这一个TLS_RSA_WITH_3DES_EDE_CBC_SHA。太奇怪了! 我怎样才能摆脱这个密码?提前道谢。

  • 问题内容: 如果您在Go中使用http.FileServer,例如: 然后访问目录将为您提供文件列表。通常,这对于Web服务是禁用的,而是以404响应,我也希望这种行为。 http.FileServer没有针对此AFAIK的选项,我在这里看到了解决此问题的建议方法https://groups.google.com/forum/#!topic/golang- nuts/bStLPdIVM6w 他们在

  • 我试图调试我的案例,简单的ActiveWeb应用程序没有在Jetty下运行。它的行为就像不存在任何用于请求处理的类一样,并返回错误404。 问题不在于ActiveWeb。是关于码头的。如何发现Jetty有一些web应用程序,它有一个带注释的类,并将在HTTP请求下执行它? 目前我已经下载了Jetty,它可以工作。不幸的是,它没有日志记录。当404错误返回时,没有任何东西显示在或中,也没有任何文件显