首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring和PreFlight请求

Spring和PreFlight请求
EN

Stack Overflow用户
提问于 2017-11-01 12:15:44
回答 1查看 1.5K关注 0票数 2

我正在使用Spring Boot version 2.0.0.M5

我的JavaScript应用程序在调用公开的Rest端点时遇到问题。为了安全-我期望一个包含api密钥的头将被传入。但是-飞行前请求(选项)没有设置标头

下面的JavaScript片段为我复制了错误

代码语言: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);

即使我把它作为一个选项请求-- x-api-key头没有被传递。

我在Spring中的cors设置如下

代码语言:javascript
复制
@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);      
}

我想知道处理这些飞行前请求的正确方法是什么?或者,是否有人对如何传递标题有任何建议?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-01 13:36:10

当请求方法是选项时,我通过在所有api请求上添加一个过滤器来解决这个问题??我只是成功地从过滤器中返回。

代码语言:javascript
复制
    if ("OPTIONS".equals(request.getMethod())) {
        response.setStatus(HttpServletResponse.SC_OK);
        return super.preHandle(request, response, handler);
    }
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47054612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档