2016-06-28 5 views
12

Ich habe Jetty 9.3 mit zwei XML-Kontextkonfigurationen eingerichtet. Eine für static content:Anlegesteg: HTTP auf HTTPS für statischen Inhalt umleiten

<?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> 

und eine für eine Webanwendung (WAR-Datei):

<?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> 

habe ich dann this answer Jetty einzurichten, um HTTP-Anfragen an HTTPS weiterleiten. Genauer gesagt, habe ich folgende 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> 

und fügte hinzu, die folgenden meinen HttpConfiguration in jetty/etc/jetty.xml:

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

Das funktioniert perfekt für meine Web-Anwendung (dh Zugriff auf den Server über HTTP zu '/webapp 'wird zu HTTPS umleiten, scheint aber den statischen Inhalt, der unter'/static 'bereitgestellt wird, nicht zu beeinflussen. Ich nehme an, dies liegt daran, dass die Einstellung, die zu webdefault.xml hinzugefügt wurde, nur für Web-Anwendungen gilt, da sie eine anwendbare Datei web.xml haben.

Wie kann ich HTTP-Anfragen einrichten, um für alle meine Seiten, die als statischer Inhalt dienen, an HTTPS umzuleiten?

+0

Was ist mit 'RewriteHandler'? Vielleicht hilft es dir, dein Problem zu lösen. Stellen Sie statischen Inhalt einfach mit diesem Handler bereit. – Hrabosch

+0

Sie können 'nginx' für dieses verwenden, zusammen mit der' http'- zu 'https'-Weiterleitung erhalten Sie andere Vorteile wie statischen Seitencache. – Srinivasu

+0

Haben Sie versucht, das Standard-Servlet + ServletContextHandler für Ihren statischen Inhalt anstelle von ResourceHandler zu verwenden (was sehr begrenzt ist)? Vielleicht würde es helfen. @srini Meiner Meinung nach ist die Verwendung eines anderen HTTPD-Servers (Apache, Nginx, ...) nur für die Umleitungen ein bisschen zu viel, besonders wenn Ihr Server sehr begrenzte Ressourcen hat. Ich benutze ein kleines Board mit nur einem GB RAM, ich würde Ihrem Vorschlag nicht folgen. – gouessej

Antwort

0

Soweit ich sagen konnte (z. B. basierend auf this SO und this SF und die Jetty Docs) ist es nicht für statische Inhalte, nur für Webapps konfigurierbar.

Was Sie könnte do (das bedeutet nicht, dass Sie sollte tun es auf diese Weise), ist, dass Sie eine benutzerdefinierte @PreMatching Filter erstellen, wenn Sie JAX-RS verwenden oder eine benutzerdefinierte MessageHandler wenn Sie JAX- verwenden WS, der die Umleitung programmatisch vornimmt (zB durch Rückgabe eines HTTP 301).

Verwandte Themen