跨域问题(CORS-Cross-Origin Resource Sharing跨域资源共享)

在浏览器中浏览器为了安全,会有一个跨域策略,浏览器只允许网页访问同源的接口并访问数据(注意:跨域请求不会自动携带 Cookie)

同源的定义:

(1)协议相同(http/https)

(2)域名相同

(3)端口相同

三者有任何不同就会存在跨域问题

SpringBoot 中如何解决跨域问题

1.通用跨域配置类

java 复制代码
package com.qcq.sw.config;

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() {
        CorsConfiguration config = new CorsConfiguration();
        config.setAllowCredentials(true); // 必须
        config.addAllowedOriginPattern("*"); // 必须
        config.addAllowedHeader("*");
        config.addAllowedMethod("*");

        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", config);

        return new CorsFilter(source);
    }
}

2.@CorssOrigin

使用@CorssOrigin注解给 单个接口或则整个Controller类 添加允许跨域的前端域名

java 复制代码
@CorssOrigin(orgin = "http://localhost:5173")

3.使用WebMvcConfigurer(另外一种全局配置)

java 复制代码
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")                  // 所有接口
                .allowedOrigins("http://localhost:3000")  // 允许前端
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
                .allowedHeaders("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

为什么要限制跨域?

假设没有跨域限制,会出现严重的安全问题:

案例 1:窃取用户数据

  • 你登录了银行网站,浏览器保存了 cookie(会话信息)
  • 恶意网站偷偷在后台发 AJAX 请求到银行网站接口
  • 如果浏览器允许跨域,恶意网站就能拿到你的账户信息

案例 2:伪造请求(CSRF)

  • 恶意网站让用户浏览页面
  • 自动触发对另一个站点的请求(带 cookie)
  • 如果没有跨域限制,服务器可能被攻击

案例 3:保护浏览器环境

  • 网站可以通过 JS 操作浏览器 DOM、读取数据
  • 如果允许跨域访问任意接口,网页就可能窃取其他站点的敏感数据
相关推荐
invicinble1 小时前
c端系统,其实更像一个信息展示平台
前端
李姆斯2 小时前
管理是否可以被完全量化
前端·产品经理·团队管理
名字还没想好☜2 小时前
Next.js 中间件实战:鉴权、重定向与 A/B 分流
开发语言·前端·javascript·中间件·react·next.js
广州灵眸科技有限公司3 小时前
瑞芯微RV1126B开发板(EASY-EAI-PI2) INI文件操作
java·前端·javascript·网络·人工智能
江华森3 小时前
Web 开发基础:HTTP 与 REST
前端·网络协议·http
IT_陈寒4 小时前
Redis的KEYS命令把我搞崩溃了,改用SCAN才活过来
前端·人工智能·后端
Jackson__4 小时前
为什么 Agent 越聊越慢?聊聊 Context(上下文)管理
前端·agent·ai编程
KaMeidebaby5 小时前
卡梅德生物技术快报|抗体合成:多肽抗体合成工程化方案:Nsp2 保守肽多抗制备与多维度验证
前端·网络·数据库·人工智能·算法
青禾网络5 小时前
前端做音画匹配这件事,我从"随机塞"到"AI 自动对齐"
前端·github
2601_963771376 小时前
Hardening Enterprise WordPress Sites Against REST API Leaks and Bad Headers
前端·windows·word·php