Sto provando a forzare SSL sul mio sito. Voglio avere un middleware stile ring per reindirizzare il sito allo stesso URL con https se è solo httpClojure/Noir: forza HTTPS, reindirizza se la richiesta era http: // a https: //
Ho scritto il seguente codice ma in realtà non fa nulla oltre a controllare lo schema di richiesta e stampare il URL a cui dovrebbe essere reindirizzato.
(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)
Come implementarlo in un'app reale?
Sto usando Clojure 1.2 con Noir.
Nota a margine: come si combinano più stringhe in una stringa senza utilizzare più str annidati?
Hmm, la sua innescando quella funzione di reindirizzamento. Ma non sta reindirizzando per qualche motivo. Dove dovrei posizionarlo? Attualmente lo ho in server.clj prima di -main definizione – dMix
Devi rendere il valore di ritorno di 'ring.util.response/redirect' il valore di ritorno del tuo gestore, eventualmente modificato dal middleware esterno (che dovrebbe lasciare l'HTTP stato e l'intestazione "Location" da solo per il diretto avere successo, ovviamente). Esempio: https://refheap.com/paste/758 –
Con noir il gestore del server ha un livello di astrazione più alto rispetto al tuo esempio. Quindi non è chiaro a me dove metterlo, ecco il mio server.clj https://gist.github.com/1840261 Potrei essere sopra la mia testa con questo :) – dMix