Jetty: перенаправление HTTP на HTTPS для статического содержимого

Я установил Jetty 9.3 с двумя конфигурациями контекста XML. Один для статический контент:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure class="org.eclipse.jetty.server.handler.ContextHandler">
  <Set name="contextPath">/static</Set>
  <Set name="handler">
    <New class="org.eclipse.jetty.server.handler.ResourceHandler">
      <Set name="resourceBase">/home/user/static</Set>
      <Set name="directoriesListed">true</Set>
    </New>
  </Set>
</Configure>

и один для веб-приложения (WAR файл):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
  <Set name="contextPath">/webapp</Set>
  <Set name="war">/home/user/webapp.war</Set>
</Configure>

Затем я использовал этот ответ, чтобы настроить Jetty для пересылки HTTP-запросов на HTTPS. В частности, я добавил следующее в jetty/etc/webdefault.xml:

<security-constraint>
  <web-resource-collection>
   <web-resource-name>Everything</web-resource-name>
   <url-pattern>/*</url-pattern>
  </web-resource-collection>
  <user-data-constraint>
   <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>
</security-constraint>

и добавил к моему HttpConfiguration в jetty/etc/jetty.xml следующее:

<Call name="addCustomizer">
  <Arg>
    <New class="org.eclipse.jetty.server.SecureRequestCustomizer" />
  </Arg>
</Call>

Это отлично работает для моего веб-приложения (т.е. доступ к серверу через HTTP в '/webapp' будет перенаправлен на HTTPS), но, похоже, не влияет на статический контент, обслуживаемый под "/static". Я предполагаю, что это связано с тем, что параметр, добавленный в webdefault.xml, применяется только к веб-приложениям, так как они имеют применимый файл web.xml.

Как настроить HTTP-запросы для перенаправления на HTTPS, чтобы все мои страницы служили статическим контентом?

Ответ 1

Насколько я мог сказать (например, на основе this SO и этот SF и Jetty Docs) он не настраивается для статического контента, только для веб-приложений.

Что вы могли бы сделать (это не значит, что вы должны сделать это таким образом) заключается в том, что вы создаете собственный @PreMatching фильтр если вы используете JAX-RS или пользовательский MessageHandler, если вы используете JAX-WS, который выполняет перенаправление программно (например, путем возврата HTTP 301).