我想使用 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)
我认为该模式仅匹配 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