Clojure/Noir : Force HTTPS, 如果请求是 http://到 https://则重定向

标签 clojure noir

我正在尝试在我的网站上强制使用 SSL。我想要一个环形中间件,将网站重定向到与 https 相同的 URL(如果它只是 http)

我编写了以下代码,但除了检查请求方案并打印它应该重定向到的 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 和 Noir。

附注:如何在不使用多个嵌套字符串的情况下将多个字符串合并为一个字符串?

最佳答案

您可以使用ring.util.response/redirect:

(fn handler [request]
  (if need-to-redirect?
    ;; NB. target-url should be a string
    (ring.util.response/redirect target-url)
    ...))

至于旁注,str 是可变参数:

(str "foo" 'bar "baz")
; => "foobarbaz"

关于Clojure/Noir : Force HTTPS, 如果请求是 http://到 https://则重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9303054/

相关文章:

clojure - 如果我加载一个包含 (ns my-namespace) 的文件,为什么它不切换我当前的命名空间?

html - 如何在 Enlive 中对更复杂的 HTML 片段使用选择器否定(但是...)?

mongodb - 使用 monger 与从属实例进行只读连接

clojure - 无法从 compojure 中的 POST 请求中提取多部分参数

clojure - 将数据传递给黑色 View - Clojure

constructor - Clojure:从Map分配defrecord字段

c# - 如何添加对 AWS SQS 队列的权限?