[心得]SpringBoot使用addCorsMappings配置跨域的坑

news/2024/7/4 1:32:07

什么是跨域问题这里我就不说了,直接说我使用addCorsMappings方法配置跨域时遇到的问题。具体代码如下:

public void addCorsMappings(CorsRegistry registry) {
   
    registry.addMapping("/**")
            .allowedOrigins("*")
            .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
            .allowCredentials(true)
            .allowedHeaders("*")
            .maxAge(3600);
}

但是使用此方法配置之后再使用自定义拦截器时跨域相关配置就会失效
原因是请求经过的先后顺序问题,当请求到来时会先进入拦截器中,而不是进入Mapping映射中,所以返回的头信息中并没有配置的跨域信息。浏览器就会报跨域异常。

正确的解决跨域问题的方法时使用CorsFilter过滤器。代码如下:

private CorsConfiguration corsConfig() {
    CorsConfiguration corsConfiguration = new CorsConfiguration();
    * 请求常用的三种配置,*代表允许所有,当时你也可以自定义属性(比如header只能带什么,只能是post方式等等)
    */
    corsConfiguration.addAllowedOrigin("*");
    corsConfiguration.addAllowedHeader("*");
    corsConfiguration.addAllowedMethod("*");
    corsConfiguration.setAllowCredentials(true);
    corsConfiguration.setMaxAge(3600L);
    return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", corsConfig());
    return new CorsFilter(source);
}

参考资料:

1、【SpringMVC】与权限拦截器冲突导致的Cors跨域设置失效问题
2、springboot web跨域访问问题解决--addCorsMappings和CorsFilter


http://www.niftyadmin.cn/n/2815630.html

相关文章

Java并发27:Atomic系列-原子类型累加器XxxxAdder和XxxxAccumulator的学习笔记

[超级链接:Java并发学习系列-绪论] [系列概述: Java并发22:Atomic系列-原子类型整体概述与类别划分] 本章主要对原子累加器进行学习。 1.原子类型累加器 原子类型累加器是JDK1.8引进的并发新技术,它可以看做AtomicLong和AtomicDouble的部分…

测试周期内测试进度报告规范

本文来自网易云社区作者:刘卓在以往的项目测试经历中,经常会遇到如下问题,导致测试进度不能很好的把控,项目上线延期:1. 已经到了提测时间,或者已经到了上在线确认环境和在线环境的时间,但是测试…

Java并发28:ThreadLocal学习笔记-简介、基本方法及应用场景

[超级链接:Java并发学习系列-绪论] 本章主要对ThreadLocal进行学习。 1.初始ThreadLocal ThreadLocal又称为线程本地变量、线程局部变量,来源于JDK1.2版本。 简单来说,每个线程都单独存放一个ThreadLocal变量的副本,线程之间互…

Java并发29:ThreadLocalRandom学习笔记-随机数的三种使用方法

[超级链接:Java并发学习系列-绪论] 本章主要对ThreadLocalRandom进行学习。 1.ThreadLocalRandom简介 ThreadLocalRandom是Java提供的用于并发产生伪随机数的工具类,出现于JDK1.7版本中。 ThreadLocalRandom可以看做Math.random()的并发升级类。 Thr…

Oralce查询某一用户下所有表名带下划线_的空表

1.分析 主要有三个关键点: USER_TABLES(TABS)模糊查询的下划线_处理ORACLE-ANALYZE 1.1.USER_TABLES(TABS) USER_TABLES(TABS):特定于当前用户的所有表的视图。 此时图包含表名(TABLE_NAME)、记录条数(NUM_ROWS)等信息。 例如,查询当前…

某网站Redis与MySql同步方案分析

后续文章: 通过Canal保证某网站的Redis与MySql的数据自动同步 1.编写目的 某网站项目引入了redis缓存技术,如何保证Redis与MySql的数据一致性是开发人员需要首要解决的问题。 本文主要包括以下内容: Redis与MySql的数据一致性方案汇总与选…

您需要渐进式 Web 应用程序做项目开发的7个理由

概述自从渐进式Web应用程序(PWA)诞生以来,许多公司已开始利用这个新平台来增强用户体验并扩展新的用户群。其中,不乏来自Twitter,FlipKart,沃尔玛和阿里巴巴等大型科技公司的经典案例。 如今,PW…

Java并发30:CountDownLatch(上)--基本方法学习

[超级链接:Java并发学习系列-绪论] 本章主要对CountDownLatch的基本方法进行学习。 有关CountDownLatch的应用实例详见下一章:《Java并发:31》 1.CountDownLatch简介 CountDownLatch,是JDK1.5的java.util.concurrent并发包中提供的一个并发…