Jetty:将 HTTP 重定向到 HTTPS 以获取静态内容

2022-09-04 04:49:09

我已经为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>

和一个用于 Web 应用程序(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>

并添加了以下内容到我的:HttpConfigurationjetty/etc/jetty.xml

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

这非常适合我的Web应用程序(即通过HTTP访问服务器在“/webapp”将重定向到HTTPS),但似乎不会影响“/static”下提供的静态内容。我假设这是因为添加到的设置仅适用于Web应用程序,因为它们具有适用的文件。webdefault.xmlweb.xml

如何设置 HTTP 请求以重定向到 HTTPS,因为我的所有页面都作为静态内容?


答案 1

据我所知(例如,基于这个SO这个SFJetty Docs),它不能配置为静态内容,只能配置Web应用程序。

您可以执行的操作(这并不意味着您应该这样做)是,如果您使用的是 JAX-RS,则可以创建自定义@PreMatching过滤器;如果您使用的是以编程方式执行重定向的 JAX-WS(例如,通过返回 HTTP 301)来创建自定义消息处理程序


答案 2

推荐