如何让 Jetty 将 http 重定向到 https

Noe*_*edy 12 jetty

我想使用 Jetty (6.1.24) 将所有对 http 的请求重定向到 https。出于某种原因(我的无知)这让我望而却步。这就是我所拥有的:

<New id="redirect" class="org.mortbay.jetty.handler.rewrite.RedirectPatternRule">
  <Set name="pattern">http://foobar.com/*</Set>
  <Set name="location">https://foobar.com</Set>
</New>
Run Code Online (Sandbox Code Playgroud)

作为回应,我得到 200 - 好的,正文是 http 上的页面,即不会发生重定向。

小智 7

说到 Jetty 9...如果您的 SSL 连接器已经工作,您可以这样做:

第 1 步:通过将其添加到您的 web.xml 确保一切都通过 SSL。如果您尝试通过 HTTP 访问资源,这将返回 403 !SECURE 错误

<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>
Run Code Online (Sandbox Code Playgroud)

第 2 步:当看到 403 !SECURE 错误时,将 Jetty 重定向到 HTTPS,方法是将其添加到您的 jetty.xml

<New id="tlsHttpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
   <Arg>
      <New id="httpConfig" class="org.eclipse.jetty.server.HttpConfiguration">
         <!-- This says... Redirect to https://host:8443 if server returns "NOT SECURE" error -->
         <Set name="secureScheme">https</Set>
         <Set name="securePort">8443</Set>
      </New>
   </Arg>
   <Call name="addCustomizer">
      <Arg>
         <New class="org.eclipse.jetty.server.SecureRequestCustomizer" />
      </Arg>
   </Call>
</New>

<!-- This is your HTTP connector, you should have another one for HTTPS -->
<New class="org.eclipse.jetty.server.ServerConnector">
   <Arg name="server">
      <Ref refid="MyServer" />
   </Arg>
   <Arg name="factories">
      <Array type="org.eclipse.jetty.server.ConnectionFactory">
         <Item>
            <New class="org.eclipse.jetty.server.HttpConnectionFactory">
               <Arg name="config">
                  <!-- defined above -->
                  <Ref refid="tlsHttpConfig" />
               </Arg>
            </New>
         </Item>
      </Array>
   </Arg>
   <Set name="host">localhost</Set>
   <Set name="port">8080</Set>
</New>
Run Code Online (Sandbox Code Playgroud)


Mir*_*ici 4

我认为该模式仅匹配 URI。你应该使用类似的东西:

<New id="forwardedHttps" class="org.eclipse.jetty.rewrite.handler.ForwardedSchemeHeaderRule">
           <Set name="header">X-Forwarded-Scheme</Set>
           <Set name="headerValue">https</Set>
           <Set name="scheme">https</Set>
</New>
Run Code Online (Sandbox Code Playgroud)

请参阅: http: //download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/rewrite/handler/RewriteHandler.html