我正在编写一个Ring
中间件,并且还使用Compojure
. 我希望我的中间件查看 :params 映射以查看用户是否提供了特定密钥。不过,在我的中间件函数中,请求映射不包含 :params 映射。在最终的请求处理程序中,有一个:params
映射。我在想:params
地图没有在我的自定义中间件之前设置,但我不知道如何让它实际设置。
有任何想法吗?
(ns localshop.handler
(:use [ring.middleware.format-response :only [wrap-restful-response]]
[compojure.core])
(:require [localshop.routes.api.items :as routes-api-items]
[localshop.middleware.authorization :as authorization]
[compojure.handler :as handler]))
;; map the route handlers
(defroutes app-routes
(context "/api/item" [] routes-api-items/routes))
;; define the ring application
(def app
(-> (handler/api app-routes)
(authorization/require-access-token)
(wrap-restful-response)))
上面是我的 handler.clj 文件,下面是中间件本身。
(ns localshop.middleware.authorization)
(defn require-access-token [handler]
(fn [request]
(if (get-in request [:params :token])
(handler request)
{:status 403 :body "No access token provided"})))