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

Spring Boot中如何处理跨域请求(CORS)

在Spring Boot中,处理跨域请求(CORS, Cross-Origin Resource Sharing)通常有几种方法。可以通过全局配置、控制器级别的配置或者方法级别的配置来实现。以下是三种常见的方式:

1. 全局配置 CORS

你可以在全局配置中处理跨域请求。这种方法适用于所有控制器和请求。

示例代码:

创建一个 WebConfig 类,并实现 WebMvcConfigurer 接口。

import org.springframework.context.annotation.Bean;
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 WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // 允许所有路径跨域访问
        registry.addMapping("/**")
                .allowedOrigins("http://xxx.com") // 允许指定域名跨域 
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的HTTP方法
                .allowedHeaders("*") // 允许所有请求头
                .allowCredentials(true) // 允许携带认证信息
                .maxAge(3600); // 预检请求的缓存时间,单位为秒
    }
}
说明:
  • addMapping("/**"): 允许所有路径的跨域请求。
  • allowedOrigins("http://xxx.com"): 允许来自 http://xxx.com 的跨域请求。
  • allowedMethods(...): 设置允许的 HTTP 方法。
  • allowedHeaders("*"): 允许所有请求头。
  • allowCredentials(true): 允许发送带有凭据的请求。
  • maxAge(3600): 设置预检请求的缓存时间(单位为秒)。

2. 控制器级别 CORS

如果只想为某个特定的控制器或接口方法处理跨域请求,可以使用 @CrossOrigin 注解。

示例代码:
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class MyController {

    // 允许来自指定域名的跨域请求
    @CrossOrigin(origins = "http://xxx.com")
    @GetMapping("/api/data")
    public String getData() {
        return "Hello Spring Boot";
    }
}
说明:
  • @CrossOrigin: 可以用来标注单个方法或者整个类。上面的例子中,getData() 方法允许来自 http://xxx.com 的跨域请求。
  • 如果你希望为整个控制器的方法添加跨域配置,可以将 @CrossOrigin 放在类上。

3. 方法级别 CORS

你也可以在具体的控制器方法上单独指定 CORS 配置,这样可以更加精细地控制不同方法的跨域行为。

示例代码:
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class AnotherController {

    @CrossOrigin(origins = "http://xxx.com", allowedHeaders = "Content-Type")
    @RequestMapping("/api/data")
    public String getOtherData() {
        return "hello data";
    }
}

总结:

  • 全局配置 适用于需要为整个应用配置跨域支持的场景。
  • 控制器级别配置 适用于为某个控制器的所有方法配置跨域支持的场景。
  • 方法级别配置 适用于为具体的某个方法配置跨域支持的场景。

http://www.kler.cn/a/504068.html

相关文章:

  • what?ngify 比 axios 更好用,更强大?
  • 设计模式 行为型 访问者模式(Visitor Pattern)与 常见技术框架应用 解析
  • 【微服务】面试题 5、分布式系统理论:CAP 与 BASE 详解
  • 论文笔记(六十一)Implicit Behavioral Cloning
  • 从CentOS到龙蜥:企业级Linux迁移实践记录(龙蜥开局)
  • 服务器数据恢复—raid5故障导致上层ORACLE无法启动的数据恢复案例
  • 【Linux】Linux基础命令(二)
  • 《Openlayers零基础教程》第六课:地图控件
  • 《重生到现代之从零开始的数据结构生活》——单链表
  • MySQL:表的内外连接
  • Python爬虫基础——IP反爬虫的应对
  • 工业互联网项目开发工作流及各阶段核心关注点
  • 如何通过openssl生成.crt和.key
  • 如何入门编程
  • CNN张量输入形状和特征图
  • Ubuntu 20.04 安装Cuda 12.2版本踩坑记录
  • 微服务中的日志管理中间件的使用和管理
  • ​​​​​​​​​​​​​​★3.3 事件处理
  • 如何使用PHP构建IoC容器,实现依赖注入!
  • 我国无人机新增实名登记110.3 万架,累计完成飞行2666万小时
  • LKT4304新一代算法移植加密芯片,守护物联网设备和云服务安全
  • 免费送源码:Java+ssm+Android 基于Android系统的外卖APP的设计与实现 计算机毕业设计原创定制
  • 智能物流升级利器——SAIL-RK3576核心板AI边缘计算网关设计方案(一)
  • 外部获取nVisual所在层级方法
  • 【系统安全】CVE-2024-49113 Windows轻量级目录访问协议(LDAP)拒绝服务漏洞
  • 45_Lua模块与包