Próbuję zmusić SSL do mojej witryny. Chcę mieć medium w stylu pierścienia do przekierowania witryny do tego samego adresu URL za pomocą protokołu https, jeśli jest to tylko httpClojure/Noir: Wymuś HTTPS, przekieruj, jeśli żądanie było http: // na https: //
Napisałem poniższy kod, ale tak naprawdę nic nie robi, oprócz sprawdzenia schematu żądania i wydrukowania Adres URL, do którego powinien przekierowywać.
(defn https-url [request-url]
(str (str (str (str "https://" (:server-name request-url) ":") (:server-port request-url))) (:uri request-url)))
(defn require-https
[handler]
(fn [request]
(let [page-request (handler request)]
(if (= (:scheme page-request) :http)
(println (https-url page-request))))))
(server/add-middleware require-https)
Jak zastosować to w prawdziwej aplikacji?
Używam clojure 1.2 z Noir.
Nota boczna: Jak połączyć wiele ciągów w jeden ciąg bez użycia wielu zagnieżdżonych str?
Hmm, jego wyzwalanie tę funkcję przekierowania. Ale z jakiegoś powodu nie przekierowuje. Gdzie mam to umieścić? Obecnie mam go w server.clj przed -main definicji – dMix
Musisz zrobić wartość zwracaną 'ring.util.response/redirect' zwracaną wartość swojego handlera, ewentualnie być modyfikowane przez zewnętrzne middleware (które powinny opuścić HTTP status i nagłówek "Lokalizacja" dla bezpośredniego powodzenia, oczywiście). Przykład: https://refheap.com/paste/758 –
Dzięki funkcji noir obsługa serwera jest na wyższym poziomie abstrakcji niż w twoim przykładzie. Więc nie jest dla mnie jasne, gdzie to ująć, heres mój server.clj https://gist.github.com/1840261 Może być w mojej głowie z tym :) – dMix