我正在尝试在我的网站上强制使用SSL.我希望有一个响铃式中间件,如果它只是http,则使用https将站点重定向到相同的URL
我编写了以下代码,但除了检查请求方案并打印应该重定向到的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)
Run Code Online (Sandbox Code Playgroud)
我如何将其实现为真正的应用程序?
我正在使用黑色的clojure 1.2.
旁注:如何使用多个嵌套的str将多个字符串组合成一个字符串?
你可以使用ring.util.response/redirect:
(fn handler [request]
(if need-to-redirect?
;; NB. target-url should be a string
(ring.util.response/redirect target-url)
...))
Run Code Online (Sandbox Code Playgroud)
至于旁注,str是可变的:
(str "foo" 'bar "baz")
; => "foobarbaz"
Run Code Online (Sandbox Code Playgroud)