Как запретить Jetty показывать информацию, связанную с контекстом

Я использую Jetty для развертывания веб-сайта. Предположим, что мой сайт - foo.com. Когда я указываю свой браузер на контекст, который не существует (например, foo.com/notavailable), Jetty показывает страницу с информацией обо всех контекстах, которые развернуты на ней.

Это выглядит примерно так:

Никакой контекст на этом сервере не соответствует или не обрабатывает этот запрос. Контекстами, известными этому серверу, являются:

Я хочу, чтобы Jetty не показывал это сообщение, потому что он содержит полный путь к контексту на сервере.

Есть ли способ сделать это?

Ответ 1

Эта страница предоставляется Jetty "DefaultHandler"

Чтобы эта страница не отображалась, вы должны удалить обработчик с вашего сервера (он настроен в файле jetty.xml) Вам действительно не нужен (или не нужен) обработчик по умолчанию на сервере производства (интернет), поэтому рекомендуется удалить его.

Обратите внимание, что он также предоставляет обычную страницу 404 и favicon.ico, поэтому, если вы полагаетесь на эти поведения, вам нужно будет заменить.

Ответ 2

При настройке Jetty XML вы можете установить showContexts на false на DefaultHandler.

Если вы используете старые версии Jetty, замените org.eclipse.jetty на моем примере старой структурой пакета org.mortbay.jetty.

  <Configure id="Server" class="org.eclipse.jetty.server.Server">

  <!-- =========================================================== -->
  <!-- Set handler Collection Structure -->
  <!-- =========================================================== -->
  <Set name="handler">
    <!-- the collection of handlers that will handle the request -->
    <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
      <Set name="handlers">
        <Array type="org.eclipse.jetty.server.Handler">
          <!-- primarily handles the request and maps the request to a ContextHandler -->
          <Item>
            <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
          </Item>

          <!-- The default handler ... handles the request if not yet handled -->
          <Item>
            <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler"/>
          </Item>

          <!-- The handler for your request logs -->
          <Item>
            <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler"/>
          </Item>
        </Array>
      </Set>
    </New>
  </Set>

  <!-- ===================== -->
  <!-- DefaultHandler config -->
  <!-- ===================== -->

  <Ref id="DefaultHandler">
    <Set name="showContexts">false</Set>
  </Ref>

</Configure>

Возможно, вам также захочется предотвратить просмотр каталогов, настроив DefaultServlet вашего web.xml,

  <servlet>
    <servlet-name>default</servlet-name>
    <servlet-class>org.eclipse.jetty.servlet.DefaultServlet</servlet-class>
    <init-param>
      <param-name>dirAllowed</param-name>
      <param-value>false</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>

Ответ 3

В версии Jetty 9.X появилось свойство showContexts в классе org.eclipse.jetty.servlet.DefaultServlet. Следовательно, мы можем установить showContexts в flase, если вы не хотите показывать список контекстов.

<Item>
 <New id="DefaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler">
     <Set name="showContexts">false</Set>
 </New>
</Item>