我有一个带有 Pedestal 和 Reitit 的 Clojure 应用程序,并且我需要 origin 标头参数是强制性的。
;; 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 方法不会发送原始标头参数以避免 cors 的攻击。
我可以解决这个问题吗?
谢谢你的帮助