2012-02-15 22 views
8

पर था, तो मैं अपनी साइट पर एसएसएल को मजबूर करने की कोशिश कर रहा हूं। मैं साइट को उसी यूआरएल पर https के साथ रीडायरेक्ट करने के लिए एक अंगूठी शैली मध्य-बर्तन रखना चाहता हूं, यदि यह केवल httpक्लोजर/नोएर: फोर्स एचटीटीपीएस, अगर अनुरोध http: // https: //

मैंने निम्नलिखित कोड लिखा है लेकिन यह वास्तव में अनुरोध योजना की जांच करने और प्रिंट करने के अलावा कुछ भी नहीं करता है यूआरएल इसे रीडायरेक्ट करना चाहिए।

(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) 

मैं इसे एक असली ऐप में कैसे कार्यान्वित करूं?

मैं नोएर के साथ क्लोजर 1.2 का उपयोग कर रहा हूं।

साइड नोट: मैं एकाधिक तारों को एकाधिक घोंसले वाले स्ट्रों का उपयोग करके एक स्ट्रिंग में कैसे जोड़ूं?

उत्तर

6

आप ring.util.response/redirect उपयोग कर सकते हैं: अपने ट्रिगर रीडायरेक्ट समारोह

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

हम्म,:

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

ओर टिप्पणी का सवाल है, str variadic है। लेकिन यह किसी कारण से पुनर्निर्देशित नहीं है। मुझे यह कहां रखना चाहिए? मेरे पास वर्तमान में server.clj से पहले है- मेन परिभाषा – dMix

+0

आपको अपने हैंडलर के रिटर्न वैल्यू 'ring.util.response/रीडायरेक्ट' का रिटर्न वैल्यू बनाना होगा, संभवतः बाहरी मिडलवेयर द्वारा संशोधित किया जाना चाहिए (जिसे HTTP छोड़ना चाहिए निश्चित रूप से सफल होने के लिए स्थिति और "स्थान" शीर्षलेख अकेले)। उदाहरण: https://refheap.com/paste/758 –

+0

नोयर के साथ सर्वर हैंडलर आपके उदाहरण की तुलना में अमूर्तता के उच्च स्तर पर है। तो यह मुझे स्पष्ट नहीं है कि इसे कहां रखा जाए, मेरा server.clj है https://gist.github.com/1840261 मैं इस के साथ अपने सिर पर हो सकता हूं :) – dMix

संबंधित मुद्दे