[英]Host vs Origin header for CORS preflight request with Spring Boot & Zuul
[英]Spring Boot and PreFlight requests
我正在使用Spring Boot version 2.0.0.M5
我的JavaScript
应用程序在调用暴露的 Rest 端点时遇到问题。 为了安全 - 我希望传入一个包含 api 密钥的标头。但是 - 预检请求(选项)没有设置标头
以下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-ke
标头没有通过
我在 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);
}
我想知道处理这些预检请求的正确方法是什么? 或者有没有人有任何关于让标题通过的建议?
我通过在所有 api 请求上添加过滤器解决了这个问题
if ("OPTIONS".equals(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
return super.preHandle(request, response, handler);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.