java 在Jetty服务器上,如果servlet只Map到特定的url模式,如何禁用目录列表?

hpcdzsge  于 2023-01-15  发布在  Java
关注(0)|答案(4)|浏览(136)

我有一个由Jetty服务器部署的.war应用程序。当我访问它时,我可以通过导航到localhost/MyServlet/folder来查看目录结构。我尝试在web.xml文件中包含以下内容:

<servlet>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>com.something.path.my.class.Servlet</servlet-class>
    <init-param>
        <param-name>dirAllowed</param-name>
        <param-value>false</param-value>
    </init-param>
</servlet>

当我重建.war并运行它时,我仍然可以在浏览器中访问目录结构。这是我所期望的,因为我在web.xml中定义了以下内容:

<servlet-mapping>
    <servlet-name>MyServlet</servlet-name>
    <url-pattern>*.html</url-pattern>
</servlet-mapping>

所以我知道这不是servlet引起的,是Jetty处理和返回这些目录结构。但是我找不到任何方法在Jetty中关闭它。有人知道解决这个问题的方法吗?

jei2mxaa

jei2mxaa1#

我最终发现我可以在WebApp本身的代码库中设置这个参数,当在Java代码中设置Web应用上下文时,我可以简单地将它设置为一个初始化参数:

WebAppContext webApp = new WebAppContext();
webApp.setInitParameter("org.eclipse.jetty.servlet.Default.dirAllowed", "false");
pjngdqdw

pjngdqdw2#

目录列表是DefaultServlet的一个特性(作为Servlet规范的一部分指定)。
这是一项Web容器功能,因此无法从WebApp本身进行控制/编辑/配置。
但这并不是全部,您需要使用Jetty XML可部署技术部署Web应用程序,并指定一个替代的defaultsDescriptor

<New id="sebWebAppContext"  class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/sebapp</Set>
  <Set name="war">./wars/sebapp.war</Set>
  <Set name="defaultsDescriptor">/home/seb/jetty/sebwebdefaults.xml</Set>
  .
  .
</New>

在这里您可以复制${jetty.home}/etc/webdefault.xml并将其复制到您选择的位置(不要编辑/修改/删除/更改${jetty.home}目录中的任何内容)。
dirAllowed参数设置为false

50few1ms

50few1ms3#

您最初的观点不起作用,因为它无法覆盖webdefault.xml中的选项。我已经说过,我通常只是编辑该文件以禁用该jetty示例的全局列表:即在webdefault.xml中

<init-param>
   <param-name>dirAllowed</param-name>
   <param-value>false</param-value>
</init-param>
628mspwn

628mspwn4#

另一个非常简单的解决方案,如果你只是想他的内容是隐藏添加一个空白(或消息的选择)index.html文件到该目录,因为这将是拿起默认。

相关问题