当前位置: 首页 > 知识库问答 >
问题:

迁移到Spring Boot 2.0.x时全局CORS配置中断

子车宏浚
2023-03-14

为什么在Spring Boot 2.0.x(我的情况是2.0.1.release)下,我的“Access-Control-Allow-Credentials”不再被发送以响应飞行前调用(选项)?下面是我的全局CORS配置,它在Spring Boot 1.5.6下运行良好:

@Configuration
public class CorsConfig {

@Bean
public WebMvcConfigurer corsConfigurer() {
    return new WebMvcConfigurerAdapter() {
        @Override
        public void addCorsMappings(CorsRegistry registry) {
            registry.addMapping("/**")
                    .allowedOrigins(
                        "http://localhost:3000",..)
                    .allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD");
        }
    };
}}

我的pom依赖项(我正在做我自己的安全和避免Spring Security):

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>

对REST终结点的服务调用失败:

加载http://localhost:8080/api/v5/sec/auth失败:对预飞行请求的响应未通过访问控制检查:响应中“access-control-allow-credentials”标头的值为“”,当请求的凭据模式为“include”时,该值必须为“true”。因此,不允许访问源“http://localhost:3000”。

我已经验证了'access-control-allow-credentials'头在Spring Boot 1.5.6中确实存在,而在Spring Boot 2.0.1中丢失了。

我能找到的所有文档,包括这里关于Spring.io的最新文档,都表明我的全局配置仍然是正确的,即使WebMvcConfigurerAdapter现在似乎不推荐使用。

更新:

迁移前(Spring Boot 1.5.6):

access-control-allow-credentials:true
access-control-allow-origin:http://localhost:3000
content-type:application/json;charset=utf-8
date:Day,dd Mon yyyy hh:mm:ss GMT
transfer-encoding:chunked
vary:Origin

迁移后(Spring Boot 2.0.1-Access-Control-Allow-Credentials头部丢失,但其他头部已更改/添加):

access-control-allow-headers:content-type
access-control-allow-methods:GET,HEAD,POST<---忽略我指定的方法
access-control-allow-origin:*<---忽略我指定的origin:
access-control-max-age:1800
content-length:0
日期:Day,dd Mon yyyy hh:mm:ss gmt
vary:origin
vary:access-control-request-method

共有1个答案

终洛华
2023-03-14

这在Spring文档和许多示例中是缺失的,但答案非常简单。我刚刚在CorsRegistry上看到了allowCredentials()方法,并将.allowCredentials(true)添加到注册表方法链中,并将Access-Control-Allow-Credentials头添加回。

另外,我不再使用不推荐使用的WebMvcConfigurerAdapter,而是现在实现WebMVCConfigureer并重写addCorsMappings()方法。

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")
                .allowedOrigins(
                        "http://localhost:3000",..)
                .allowedMethods("GET", "POST", "PUT", "DELETE", "HEAD")
                .allowCredentials(true)
        ;
    }

}
 类似资料:
  • 问题内容: 因此,我将节点应用程序从socket.io 0.9.x迁移到1.x,并且在配置RedisStore时遇到问题。在使用0.9.x时,我可以使用它,但是我不知道如何在1.x中使用它。该文档似乎仅适用于0.9.x。这是他们文档中的相关部分,我遵循并使用了旧版本: 据我所知,问题似乎出在这部分: 这些文件在socket.io模块中似乎不再存在。 另外,我一直在使用他们的迁移指南作为参考,但是没

  • 在我们当前的项目中,我们使用Java8,SpringBoot1.5.4。ApacheCamel 2.17.1版团队计划将Camel升级到3.4版。因为它支持Java8。我看到了camel文档,其中声明将从3.4中放弃对Java8的支持。X版本之后,但很难找到与camel 3.4一起使用所需的spring boot版本的兼容版本。我需要升级spring启动版本吗?如果是的话,会是哪个版本,或者在哪里

  • 问题内容: 我正在将应用程序从Hibernate 3迁移到Hibernate5。我们使用class来获取。因此,使用对象来获取数据库表列信息,例如列大小,类型..etc。似乎在Hibernate 5 类中已弃用(已删除!)。Hibernate 5中是否有其他上课的选择?否则如何进入Hibernate 5 env? 问题答案: 当我们转向一种新的模式工具方法时,它在5.0中已被删除。Database

  • 新的中间件签名 Koa v2 引入了新的中间件签名。 旧签名中间件(v1.x)支持将在 v3 中删除 新的中间件签名是这样的: // 使用异步箭头方法 app.use(async (ctx, next) => { try { await next() // next 现在是一个方法 } catch (err) { ctx.body = { message: err

  • Mpx.config 是一个对象,包含 Mpx 的全局配置。可以在启动应用之前修改下列 property: useStrictDiff 类型: boolean 默认值:false 用法: 每次有数据变更时,是否使用严格的 diff 算法。如果项目中有大数据集的渲染建议使用,可以提升效率。 import mpx from '@mpxjs/core' mpx.config.useStrictDiff

  • 全局系统配置 服务端配置 通过服务端配置,配置每台CAT服务器的职责。 配置的sample如下: id="default"是默认的配置信息,server id="10.1.1.1" 如下的配置是表示10.1.1.1这台服务器的节点配置覆盖default的配置信息,比如下面的job-machine,alarm-machine,send-machine为true。 [注意这个IP为cat拿到的内网IP