Chcę przekierować wszystkie żądania http do https przy użyciu Jetty (6.1.24). Z jakiegoś powodu (moja ignorancja) to mi umyka. Oto co mam:
<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>
W odpowiedzi otrzymuję 200 - ok, a ciało to strona ponad http, tzn. Przekierowanie nie występuje.
Odpowiedzi:
Mówiąc za Jetty 9 ... Oto, jak możesz to zrobić, pod warunkiem że twój łącznik SSL już działa:
Krok 1: Upewnij się, że wszystko przechodzi przez SSL, dodając to do pliku web.xml. Próba uzyskania dostępu do zasobu przez HTTP spowoduje zwrócenie błędu 403! SECURE
Krok 2: Poproś Jetty o przekierowanie do HTTPS, gdy zobaczy błąd 403! BEZPIECZNY, dodając go do pliku jetty.xml
źródło
Myślę, że wzorzec pasuje tylko do identyfikatora URI. Powinieneś użyć czegoś takiego:
Zobacz: http://download.eclipse.org/jetty/stable-7/apidocs/org/eclipse/jetty/rewrite/handler/RewriteHandler.html
źródło
Właśnie dodałem dokument: http://wiki.eclipse.org/Jetty/Howto/Configure_SSL#Redirecting_http_requests_to_https
źródło
O ile mi wiadomo, nie jest to łatwe do wykonania z żadnymi regułami / procedurami obsługi, które są dostarczane z Jetty 6.
Te
RedirectPatternRule
mecze natarget
która to ścieżka na serwerze pomost, a nie pełny URI, więc reguła nie jest dopasowanie.Możesz to zmienić na:
Ma to jednak 2 problemy:
https
żądania)location
podanego adresu i ignoruje wszystko, co pasowałopattern
)Możesz rozwiązać pierwszy problem za pomocą podstępów.
Możesz owinąć
RewriteHandler
wContextHandler
, a moduł obsługi kontekstu pozwala określić, które łączniki będą obsługiwały żądania od (setConnectorNames
). Możesz więc użyć tego, aby przepisywanie dotyczyło tylko żądań na łącznikach HTTP.Nie mogę jednak wymyślić sposobu na rozwiązanie drugiego problemu.
Myślę, że najlepszym rozwiązaniem będzie napisanie w tym celu własnej reguły przekierowań. Jeśli nie masz do tego odpowiednich zasobów programistycznych, skontaktuj się ze mną (możesz znaleźć mój adres e-mail za pośrednictwem mojego bloga, który znajduje się w moim profilu), a ja mogę utworzyć jeden (na tej samej licencji, co Jetty). Łatwo będzie napisać regułę, która po prostu przekieruje http na https.
źródło