2016-06-28 51 views
12

Ustawiłem Jetty 9.3 z dwiema konfiguracjami kontekstowymi XML. Jeden dla static content:Molo: Przekieruj HTTP do HTTPS dla zawartości statycznej

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

i jeden dla aplikacji sieci web (plik 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> 

I następnie wykorzystywane this answer skonfigurować Jetty do przekazania żądania HTTP na HTTPS. Dokładniej, dodałem następujące do 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> 

i dodaje następujące do mojego HttpConfiguration w jetty/etc/jetty.xml:

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

Działa to doskonale na mojej aplikacji sieci web (tj dostępu do serwera za pośrednictwem protokołu HTTP przy '/webapp 'przekieruje do HTTPS), ale nie wpływa na zawartość statyczną wyświetlaną w'/static '. Zakładam, że dzieje się tak dlatego, że ustawienie dodane do webdefault.xml dotyczy tylko aplikacji internetowych, ponieważ mają one odpowiedni plik web.xml.

Jak skonfigurować żądania HTTP przekierowania do HTTPS dla wszystkich stron obsługiwanych jako zawartość statyczna?

+0

Co z 'RewriteHandler'? Może to pomoże ci rozwiązać twój problem. Po prostu wyświetlaj zawartość statyczną przez ten moduł obsługi. – Hrabosch

+0

Możesz użyć 'nginx' do tego, wraz z przekierowaniem' http' do 'https' otrzymasz inne korzyści, takie jak pamięć podręczna strony statycznej. – Srinivasu

+0

Czy próbowałeś użyć domyślnego serwletu + ServletContextHandler dla swojej statycznej zawartości zamiast ResourceHandler (która jest bardzo ograniczona)? Może to pomoże. @Srini W mojej skromnej opinii, używanie innego serwera HTTPD (Apache, Nginx, ...) tylko dla przekierowań jest trochę za dużo, szczególnie gdy twój serwer ma bardzo ograniczone zasoby. Używam małej płyty z tylko jednym GB pamięci RAM, nie podążałbym za twoją sugestią. – gouessej

Odpowiedz

0

O ile mogłem powiedzieć (np. Na podstawie this SO i this SF i Jetty Docs), nie można go konfigurować dla zawartości statycznej, tylko dla aplikacji internetowych.

Co mógłby do (to nie znaczy, że powinien zrobić to w ten sposób) jest to, że należy utworzyć niestandardowy @PreMatching filtr jeśli używasz JAX-RS lub zwyczaj MessageHandler Jeśli używasz JAX- WS, który wykonuje programowo przekierowanie (np. Przez zwrócenie HTTP 301).