java - Jetty 7 - 禁用根文件夹/处的目录列表

标签 java jetty

我有很多生产服务器,每个服务器都运行 RMI 应用程序,还有 4 个 Java Web 应用程序,例如:

Server A:
RMI app by JNLP file;
webapp_1 (connected by RMI with local RMI app);
webapp_2 (connected by RMI with local RMI app);
webapp_3 (connected by RMI with local RMI app);
webapp_4 (connected by RMI with local RMI app);

Server B:
...the same..OK

所有用户在默认上下文(例如“main-area”)中直接在 8080 端口(直接到 Jetty)访问此服务器,可以通过一些 html 链接访问所有应用程序(RMI 应用程序、webapp_1、webapp_2 等) .

当某个用户访问“/”页面时,例如:

www.foo.com:8080/

main-area/
webapp_1/
webapp_2/
webapp_3/
...

Jetty 返回包含所有应用程序的列表(就像 Apache 的目录列表)。

有什么方法可以阻止它,或者重定向到“主区域”上下文吗?

最佳答案

"/" 不匹配的 Web 应用程序上下文列表将作为 org.eclipse.jetty.server.handler.DefaultHandler 的责任的一部分提供给您。

DefaultHandler is enabled by default ,以保持符合 Servlet 规范。

禁用 DefaultHandler:

如果您只想要一个简单的 404,DefaultHandler 不提供任何信息,那么只需在 ${jetty.home}/etc/jetty.xml 中将其注释掉

<!-- =========================================================== -->
<!-- Set handler Collection Structure                            --> 
<!-- =========================================================== -->
<Set name="handler">
  <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
    <Set name="handlers">
     <Array type="org.eclipse.jetty.server.Handler">
       <Item>
         <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
       </Item>
       <!-- Disable the DefaultHandler to avoid listing of non-matching contexts
       <Item>
         <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
       </Item>
        -->
     </Array>
    </Set>
  </New>
</Set>

呈现 "/" (ROOT) 上下文的静态内容:

如果您希望根上下文 "/" (ROOT) 呈现其他内容,则创建一个 ${jetty.home}/webapps/ROOT 目录并放入其中有一个index.html文件。

[jetty-distribution-7.6.13.v20130916]$ cat webapps/ROOT/index.html 
<h1>This is ROOT</h1>

这将部署一个静态内容 Web 应用程序,您可以在其中放置任何您想要的内容,图像、CSS 等。

自动重定向“/”(ROOT)到另一个路径:

注意:这不能与上面的 ${jetty.home}/webapps/ROOT 选项同时工作,他的这个选项或那个选项,但不能同时工作。

如果您希望 Jetty 自动将 "/" 重定向到另一个 URL,则使用重写处理程序。

确保您启用了重写选项,并包含一组重写规则 xml

[jetty-distribution-7.6.13.v20130916]$ grep rewrite start.ini 
OPTIONS=Server,jsp,jmx,resources,websocket,ext,rewrite
etc/jetty-rewrite.xml

接下来,您需要定义重写规则...

${jetty.home}/etc/jetty-rewrite.xml 的内容,用于将访问从 "/" 重定向到 "/test/"

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN"
                   "http://www.eclipse.org/jetty/configure.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">

    <Get id="oldhandler" name="handler"/>

    <Set name="handler">
     <New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
      <Set name="handler"><Ref id="oldhandler"/></Set>
      <Set name="rewriteRequestURI">true</Set>
      <Set name="rewritePathInfo">false</Set>
      <Set name="originalPathAttribute">requestedPath</Set>

      <!-- redirect from the welcome page to a specific page -->
      <Call name="addRule">
        <Arg>
          <New class="org.eclipse.jetty.rewrite.handler.RedirectRegexRule">
            <Set name="regex">^/$</Set>
            <Set name="replacement">/test/</Set>
          </New>
        </Arg>
      </Call>
     </New>
    </Set>
</Configure>

关于java - Jetty 7 - 禁用根文件夹/处的目录列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19406298/

相关文章:

Java : Reload webapp in the servlet and then redirect request

java - 1772 加勒比在线判断超时错误。请帮我找出为什么我的算法花了这么长时间

java - Android 背景上的噪音效果

java - 如何在 JavaFX 中默认检查单选按钮?

java - Jetty 通过多部分请求直接将文件上传到 FileInputStream

ssl - 集成测试中以单元测试方式测试 webhooks

java - 具有等号对象的列表的排列 - Java

java - 如何将 Angular2 与 Java 集成

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

java - Jetty 中的定时任务