gpt4 book ai didi

clojure - 环防伪中间件是否可以有条件应用?

转载 作者:行者123 更新时间:2023-12-02 21:12:04 26 4
gpt4 key购买 nike

我们有一个使用 HttpKit 来服务请求的 Web 应用程序和一个用 Ring 中间件包装的处理程序。

处理程序类似于:

(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 操作。

在文档中我可以阅读:

This middleware will prevent all HTTP methods except for GET and HEAD from accessing your handler without a valid anti-forgery token.

You should therefore only apply this middleware to the parts of your application designed to be accessed through a web browser. This middleware should not be applied to handlers that define web services.

是否有任何方法可以有条件地应用防伪设置,或者根据请求提供不同版本的site-defaults

最佳答案

您可以使用ring.middleware.conditional的运营商有条件地添加中间件。例如,有条件地添加 comment of Jochen Bedersdorfer 中提到的 api-defaults :


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

关于clojure - 环防伪中间件是否可以有条件应用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57414302/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com