2012-02-15 21 views
8

ise yeniden yönlendiriyorum Sitemde SSL'yi zorlamaya çalışıyorum. Siteyi https ile aynı URL'ye yönlendirmek için bir halka stili ortama sahip olmak istiyorum. Eğer sadece httpClojure/Noir: HTTPS'yi zorla, isteği http: // - https: //

Aşağıdaki kodu yazdım, ancak istek şemasını kontrol etmekten başka bir şey yapmıyor. Yönlendirilecek 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) 

nasıl gerçek app içine bu uygulamaya koyacak ?

Noir ile clojure 1.2 kullanıyorum.

Yan not: Birden çok dizeyi birden çok iç içe geçmiş str kullanarak bir dizeye nasıl bağlarım?

cevap

6

Sen ring.util.response/redirect kullanabilirsiniz: Yan not gelince

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

, str variadic geçerli:

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

Hmm, onun bu yönlendirme fonksiyonunu tetikleme. Ama bir nedenden dolayı yönlendirmiyor. Bunu nereye yerleştirmeliyim? Şu anda server.clj dosyasında var -main tanımı – dMix

+0

İşleçinizin dönüş değeri olan 'ring.util.response/redirect''in dönüş değerini yapmanız gerekiyor, muhtemelen dış ara katman tarafından değiştirilecek Tabi durum ve "Konum" başlığının tek başına başarılı olması için, elbette). Örnek: https://refheap.com/paste/758 –

+0

Sunucu işleyicisi, örneğinizde olduğundan daha yüksek bir soyutlama seviyesinde. Bu yüzden bana nerede koymak için açık değil, benim server.clj https://gist.github.com/1840261 myes benim başımın üstünde bu olabilir :) – dMix