环形防伪中间件可以有条件地应用吗?

雅各布

我们有一个使用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操作。

在文档中,我可以阅读:

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

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

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

欧文(Erwin Rooijakkers)

您可以使用ring.middleware.conditional的运算符有条件地添加中间件。例如,要有条件地添加Jochen Bedersdorferapi-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)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

有条件地运行中间件-Laravel

有条件地使用自定义中间件

如何根据 express/mssql 中间件反馈有条件地呈现页面

有条件地仅在具有授权属性的端点上使用中间件

我可以有条件地更改列表吗?

argparse可以有条件地解析参数吗?

有条件地应用 CSS

有条件地应用指令

我可以在应用程序的make文件中有条件地构建PC文件(Oracle Pro * c)吗?

有什么方法可以有条件地忽略Spring的JUnit的测试吗?

有什么可以防止std :: optional :: value_or()有条件地例外的吗?

在MongoDB中有条件地应用和条件

有条件地应用评估表达式类名吗?

有条件地将ng-repeat应用于CSS吗?

角度-可能有条件地应用指令吗?

组件可以删除自己的模板并有条件地放回去吗?

您可以有条件地使 Hive 脚本失败吗?

我可以在ARM模板中有条件地使用复制功能吗?

我可以根据所在的存储库有条件地激活Git提示吗?

Sapper / Svelte可以有条件地导入组件吗?

我可以有条件地向我的knex查询添加where()子句吗?

您可以根据布尔值有条件地分配类型吗?

您可以有条件地运行部分if语句吗?

可以在useEffect中有条件地进行不同的清理吗?

我可以有条件地提供特征函数的默认实现吗?

我可以有条件地选择要分配给哪个变量吗?

可以有条件地计算dplyr :: summarize()的不同部分吗?

我可以有条件地使用passport-jwt吗?

我可以有条件地编译“ Select Case”吗?