2012-02-15 17 views
8

Estoy tratando de forzar SSL en mi sitio. Quiero tener un middle-ware estilo anillo para redirigir el sitio a la misma URL con https si solo es httpClojure/Noir: Forzar HTTPS, redirigir si la solicitud fue http: // a https: //

Escribí el siguiente código pero en realidad no hace nada además de verificar el esquema de solicitud e imprimir el URL a la que debería estar redirigiendo.

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

¿Cómo implementaría esto en una aplicación real?

Estoy usando clojure 1.2 con Noir.

Nota al margen: ¿Cómo combino múltiples cadenas en una cadena sin usar múltiples str anidados?

Respuesta

6

Puede utilizar ring.util.response/redirect:

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

En cuanto a la nota al margen, es str variadic:

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

Hmm, su activación que la función de redirección. Pero no está redirigiendo por alguna razón. ¿Dónde debería colocar esto? Actualmente lo tengo en server.clj antes de -principal definición – dMix

+0

Necesita hacer que el valor de retorno de 'ring.util.response/redirect' sea el valor de retorno de su controlador, posiblemente para ser modificado por middleware externo (que debe dejar el HTTP el estado y el encabezado "Ubicación" solo para que el directo tenga éxito, por supuesto). Ejemplo: https://refheap.com/paste/758 –

+0

Con negro, el controlador del servidor tiene un nivel de abstracción más alto que el de su ejemplo. Así que no está claro para mí dónde ponerlo, aquí está mi server.clj https://gist.github.com/1840261 Puedo estar en mi cabeza con este :) – dMix