我正在编写Ring
中间件,并使用Compojure
。我希望我的中间件查看:params map以查看用户是否提供了特定的密钥。在我的中间件函数中,请求映射不包含: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"})))
答案 0 :(得分:1)
我实际想出来了。如果您调整代码的(def app ... )
部分以使其与以下内容匹配,则此方法有效:
(def app
(-> app-routes
(wrap-restful-response)
(authorization/require-access-token)
(handler/api)))