8
我試圖在我的網站上強制使用SSL。我想要一個環風格的中間件重定向站點到https相同的URL,如果它只是httpClojure/Noir:強制HTTPS,如果請求重定向http:// https://
我寫了下面的代碼,但除了檢查請求方案和打印它應該重定向到的URL。
(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)
我該如何實現這個到一個真正的應用程序?
我使用clojure 1.2與諾爾。
備註:如何將多個字符串合併爲一個字符串,而使用多個嵌套的str?
嗯,它的觸發重定向功能。但由於某種原因,它不會重定向。我應該在哪裏放置?我現在已經在server.clj之前定義了--main定義 – dMix 2012-02-15 23:48:22
您需要使'ring.util.response/redirect'的返回值成爲您的處理程序的返回值,可能會被外部中間件修改(這應該讓HTTP狀態和「位置」標題,當然直接取得成功)。示例:https://refheap.com/paste/758 – 2012-02-16 00:00:31
使用noir時,服務器處理程序處於比您的示例更高的抽象級別。所以我不清楚它在哪裏放置它,繼承人我的server.clj https://gist.github.com/1840261我可能會在這一個:)我的頭:) – dMix 2012-02-16 00:11:58