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) 注解

相关推荐
daols8814 小时前
vue vxe-context-menu 通用右键菜单组件使用
前端·javascript·vue.js·vxeui
程序员黑豆14 小时前
鸿蒙应用开发实战:轻松实现列表上拉加载更多
前端·华为·harmonyos
hamber15 小时前
GoGBA 上架半年记
前端
IT_陈寒15 小时前
Python的finally居然不等同于Go的defer,差点坑惨我
前端·人工智能·后端
恋猫de小郭15 小时前
给 AI 的 Agent 实现指南,可控 Agent 的关键
前端·人工智能·ai编程
米码收割机15 小时前
【Python】Flask+SQLite_web 宠物领养系统 (源码+文档)【独一无二】
前端·python·flask
寒水馨15 小时前
macOS下载、安装 Tailwind CSS-v4.3.3(附安装包tailwindcss-macos-arm64)
前端·css·macos·tailwind css·utility-first·css 框架·实用优先
shawxlee15 小时前
vue3+axios挑战最简洁实用的配置封装+接口调用:请求拦截器、响应拦截器、通用请求方法(单个请求/并发请求/下载文件)、统一接口管理
前端·经验分享·vue·接口·axios·api
yuhaiqiang16 小时前
上线一个人静态网站需要多少钱,难不难?
前端·后端·程序员
宸津-代码粉碎机16 小时前
Jar热部署进阶实战|修复原生方案OOM与类冲突问题,生产级无BUG优化方案
java·大数据·服务器·开发语言·前端·人工智能·python