Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 环形防伪中间件是否可以有条件地应用?_Clojure_Ring_Http Kit - Fatal编程技术网

Clojure 环形防伪中间件是否可以有条件地应用?

Clojure 环形防伪中间件是否可以有条件地应用?,clojure,ring,http-kit,Clojure,Ring,Http Kit,我们有一个使用HttpKit服务请求的web应用程序和一个用环形中间件包装的处理程序 处理程序类似于: (def handler (-> #'req-handler (wrap-defaults site-defaults) (wrap-content-type-and-encoding) (wrap-cookies) (wrap-stacktrace))) 在站点默认设置中,可以找到: :security { ...

我们有一个使用HttpKit服务请求的web应用程序和一个用环形中间件包装的处理程序

处理程序类似于:

(def handler
  (->  #'req-handler
    (wrap-defaults site-defaults)
    (wrap-content-type-and-encoding)
    (wrap-cookies)
    (wrap-stacktrace)))
在站点默认设置中,可以找到:

 :security  { ...
              :anti-forgery         anti-forgery-setting
              ... }
该应用程序过去只服务于来自浏览器的请求,但现在一些端点响应API请求,包括POST操作

在文档中,我可以阅读:

该中间件将防止除GET和HEAD之外的所有HTTP方法在没有有效的防伪令牌的情况下访问处理程序

因此,您应该只将此中间件应用于设计为通过web浏览器访问的应用程序部分。此中间件不应应用于定义web服务的处理程序

是否有任何方法可以有条件地应用防伪设置,或根据请求提供不同版本的
站点默认值?

您可以使用的运算符有条件地添加中间件。例如,要有条件地添加中提到的
api默认值


ring中有一组api默认值,您可以将其用于通向api端点的路由此示例非常完美,正是我所需要的。非常感谢!。

(require '[ring.middleware.conditional :as middleware.conditional]
(require '[ring.middleware.defaults :refer [api-defaults site-defaults])

(defn wrap-api-defaults [handler]
  (wrap-defaults handler api-defaults))

(defn wrap-site-defaults [handler]
  (wrap-defaults handler site-defaults))

(def handler
  (-> #'req-handler
      (middleware.conditional/if-url-starts-with "/api" wrap-api-defaults)
      (middleware.conditional/if-url-doesnt-start-with "/api" wrap-site-defaults)
      (wrap-content-type-and-encoding)
      (wrap-cookies)
      (wrap-stacktrace)))