Назад | Перейти на главную страницу

Как отправить постоянное (301) перенаправление с HTTP на HTTPS в Jetty 9

Следуя предложению по Как заставить Jetty перенаправлять http на https, мы смогли получить наше автономное развертывание Jetty для перенаправления всех HTTP-запросов на HTTPS. Однако перенаправление - это 302. Как мы можем вместо этого сделать это перенаправление 301 (постоянным)?

Для справки мы добавили это в файл Jetty etc / webdefault.xml:

<web-app>
  ...
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Everything in the webapp</web-resource-name>
      <url-pattern>/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>
</web-app>

Нам удалось добиться желаемого поведения, добавив файл redirector.xml рядом с war. Ниже приведено содержимое этого файла. Обратите внимание, что это также перенаправит example.com на www.example.com:

<?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.MovedContextHandler">
  <Set name="contextPath">/</Set>
  <Set name="newContextURL">https://www.example.com</Set>
  <Set name="permanent">true</Set>
  <Set name="discardPathInfo">false</Set>
  <Set name="discardQuery">false</Set>

  <Set name="virtualHosts">
    <Array type="String">
      <Item>example.com</Item>
    </Array>
  </Set>
</Configure>