当前位置: 首页 > news >正文

springboot中如何处理跨域

什么是跨域

跨域(Cross-Origin)是浏览器出于安全考虑,对不同源的资源访问施加的限制机制。其核心原因是同源策略(Same-Origin Policy),即浏览器仅允许协议(Protocol)、域名(Domain)、端口(Port)三者完全相同的页面进行资源交互,否则会触发跨域问题。

常见于前后端分离开发(如前端运行在 http://localhost:3000,后端接口在 http://api.example.com)、CDN 资源加载、第三方 API 调用等。

跨域是浏览器的安全拦截机制,跨域请求并非完全失败,而是浏览器在接收到响应后主动拦截。例如,后端可能正常返回数据,但浏览器因检测到跨域而拒绝处理响应。

跨域的解决方案

JSONP(JSON with Padding)

利用 <script> 标签的跨域加载特性,通过回调函数传递数据。

仅支持 GET 请求,安全性较低(易受 XSS 攻击),逐渐被 CORS 取代。(不推荐

CORS(跨域资源共享)

通过服务器设置 HTTP 响应头(如 Access-Control-Allow-Origin)声明允许访问的域名。(推荐

代理服务器

前端请求同源代理服务器,由代理转发到目标服务器,绕过浏览器限制。(推荐

springboot项目中如何支持CORS

使用 @CrossOrigin 注解

最简单的方式是在控制器类或方法上使用 @CrossOrigin 注解

@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "https://example.com") // 类级别
public class MyController {
    
    @GetMapping("/data")
    @CrossOrigin(origins = {"https://example.com", "https://another.com"}) // 方法级别
    public ResponseEntity<String> getData() {
        return ResponseEntity.ok("Hello from Spring Boot 3!");
    }
}

全局 CORS 配置

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("https://example.com", "https://another.com")  // 允许的源
                .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")  // 允许的方法
                .allowedHeaders("*")  // 允许的头部
                .allowCredentials(true)  // 是否允许凭证
                .maxAge(3600);  // 预检请求的缓存时间(秒)
    }
}

相关文章:

  • ZYNQ笔记(一):hello world
  • 如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板
  • UE5中如何修复后处理动画蓝图带来的自然状态下的metablriger身体绑定形变(如耸肩)问题
  • SQL入门篇,数据库基础语法与核心操作
  • YOLOv8主干网络升级——融合ResNet18/34/50/101的高效特征提取架构设计
  • 天梯集训笔记整理
  • Git分布式版本控制系统从入门到精通(B站黑马)学习笔记
  • Spark-Core编程
  • Java 如何实现类的热加载和热部署?
  • jQueryHTML与插件
  • MySQL切换PolarDB-X方案
  • GOT-OCR2: 通用OCR理论:通过统一端到端模型迈向OCR-2.0时代
  • NSS#Round30 Web
  • c# 找到字符串中,固定字符串的位置
  • Ant Design X 和 Element-Plus-X
  • 人工智能图像识别spark安装
  • BOTA六维力矩传感器如何打通机器人AI力控操作的三层架构?感知-决策-执行全链路揭秘
  • 【Docker基础-网络】--查阅笔记4
  • JavaScript 性能优化:突破瓶颈的实战指南
  • 【Linux】进程管理
  • php网站做代理服务器/seo指的是
  • 网站免费正能量直接进入老狼/网站seo属于什么专业
  • wordpress 设置不生效/seo综合查询网站源码
  • 为什么都用java做网站/爱链网中可以进行链接买卖
  • 给公司做网站/广州最新消息
  • win8 metro风格网站后台管理模板/外贸网站推广优化