【发布时间】:2020-10-10 04:55:53
【问题描述】:
我有一个带有 Pedestal 和 Reitit 的 Clojure 应用程序,我需要将原始标头参数设为强制性。
;; deps
[io.pedestal/pedestal.service "0.5.5"]
[pedestal/pedestal.jetty "0.5.5"]
[reitit-pedestal "0.5.5"]
[reitit "0.5.5"]
但如果我放入我的架构,请求会引发异常。
(s/defschema my-request
{:header {:origin s/Str}})
["/my-route"
{:get {:parameters my-request
:handler my-handler}}]
例外:
:errors {:origin missing-required-key}
{
"message": "Bad Request",
"exception": "clojure.lang.ExceptionInfo: clojure.lang.ExceptionInfo in Interceptor :reitit.http.coercion/coerce-request -
Request coercion failed: #reitit.coercion.CoercionError{:schema {:origin java.lang.String, Keyword Any}, :errors {:origin missing-required-key}}
请求
curl -X GET "http://localhost:3000/my-route -H "accept: application/json" "origin: TEST" -H "user-agent: test"
CURL 请求有效,问题仅在使用 GET 方法的 Swagger UI 中。
似乎 Swagger for get 方法没有发送 origin 标头参数以避免 cors 的攻击。
我可以解决这个问题吗?
感谢您的帮助
【问题讨论】:
-
“请求中断”是什么意思?请将 errors/stacktraces/... 添加到问题中
-
我改写了“但是如果我放入我的架构,请求会引发异常”,更好吗?
-
我注意到 CURL 请求有效,问题仅在 swagger ui 中。