gpt4 book ai didi

javascript - Spring Boot 和 PreFlight 请求

转载 作者:行者123 更新时间:2023-11-30 21:01:55 27 4
gpt4 key购买 nike

我正在使用 Spring Boot 版本 2.0.0.M5

我的 JavaScript 应用程序在调用我公开的 Rest 端点时遇到问题。为了安全起见——我希望传入一个包含 api key 的 header 。但是 - 预检请求(选项)没有设置 header

以下 JavaScript 片段为我重现了错误

var baseEndpoint = "http://localhost:8480";
var data = null;
var xhr = new XMLHttpRequest();
xhr.withCredentials = true;
xhr.addEventListener("readystatechange", function () {
if (this.readyState === 4) {
console.log(this.responseText);
}
});
xhr.open("GET", baseEndpoint + "/api/issue/user/1");
xhr.setRequestHeader("x-api-key", "fdarwetr5467hyyerf");
xhr.setRequestHeader("cache-control", "no-cache");
xhr.setRequestHeader("Accept","application/json");
xhr.setRequestHeader("Content-Type","application/json");
xhr.setRequestHeader("Origin", "localhost");
xhr.send(null);

即使我将其设为 OPTIONS 请求 - x-api-key header 未通过

我在Spring Boot中的cors设置如下

@Override
public void addCorsMappings(CorsRegistry corsRegistry) {
super.addCorsMappings(corsRegistry);
corsRegistry.addMapping("/**").allowedMethods("*").allowedOrigins("*").exposedHeaders("x-api-key", "apiKey").allowedHeaders("x-api-key", "apiKey").allowCredentials(true);
}

我想知道处理这些预检请求的正确方法是什么?或者有人对传递 header 有任何建议吗?

最佳答案

我通过在所有 api 请求上添加过滤器解决了这个问题当请求方法为 OPTIONS 时——我只是成功地从过滤器中返回

    if ("OPTIONS".equals(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
return super.preHandle(request, response, handler);
}

关于javascript - Spring Boot 和 PreFlight 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47054612/

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