Web跨域问题

什么是跨域?协议、域名、端口,三者必须完全一致才算不跨域 。浏览器默认禁止跨域请求 返回的响应,除非后端接口明确通过 CORS 响应头 声明 "允许该前端源访问该响应"。
跨域拦截的 "执行者是浏览器",但 "是否允许跨域的决定权在后端 ------ 前端无法绕过浏览器的同源策略,必须由后端通过配置 "授权",浏览器才会把响应交给前端,所以我们需要在后端配置CORS 响应头允许哪些前端地址获取响应。

解决办法:

1.全局配置类

java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;

@Configuration
public class CorsConfig {
    @Bean
    public CorsFilter corsFilter() {
        // 1. 配置跨域
        CorsConfiguration config = new CorsConfiguration();
        // 允许的前端源(开发环境下用*允许所有,生产环境需指定具体域名,如http://localhost:8081)
        config.addAllowedOriginPattern("*"); // 注意:用addAllowedOriginPattern而非addAllowedOrigin(后者在新版Spring中已过时)
        // 允许的请求方法(GET/POST/PUT/DELETE等)
        config.addAllowedMethod("*");
        // 允许的请求头(如Content-Type、Authorization等)
        config.addAllowedHeader("*");
        // 允许前端携带Cookie(如需身份认证,需开启)
        config.setAllowCredentials(true);
        // 预检请求的有效期(秒),避免频繁预检
        config.setMaxAge(3600L);

        // 2. 配置生效的接口路径(/**表示所有接口)
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        // 3. 返回过滤器
        return new CorsFilter(source);
    }
}

2.如果不想全局允许跨域,可在 Controller 类或方法上添加 @CrossOrigin(origins = "*", maxAge = 3600) 注解

相关推荐
怕浪猫42 分钟前
分享一个做视频的skill,这条白板视频,每一笔都是代码画的
前端·javascript·面试
aa小小1 小时前
大屏自适应缩放方案
前端·数据可视化
陪我去看海2 小时前
被要求猛出小程序,做了这个多平台多环境的部署替我承受压力
前端·微信小程序·抖音小程序
Frag0ut2 小时前
告别插件时代:HTML5 视频播放对比 Flash/Silverlight/ActiveX 的性能与技术优势解析
前端·html5·视频播放·flash·activex·流媒体技术·silverlight
用户818618028002 小时前
MongoDB文档模型设计——从建模到索引
前端
無名路人3 小时前
小程序点餐页吸顶滚动之分类按需加载,上划切换
前端·vue.js·微信小程序
竹林8183 小时前
把神经网络塞进一个浏览器标签页:端侧视觉 AI 的工程真相
前端·浏览器
乘风gg4 小时前
别跟风 AI 副业,工程师最该学的是 AI Coding
前端·ai编程·claude
Frag0ut4 小时前
深度解析:Chrome 自启动与后台常驻服务的作用、关闭方法及利弊权衡
前端·chrome
Amos_Web4 小时前
Rspack 源码解析(十五):Loader Runner 与 JS Loader 桥接
前端·rust·前端框架