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

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

1. 全局配置 CORS

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

示例代码:

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

java 复制代码
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 注解。

示例代码:
java 复制代码
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 配置,这样可以更加精细地控制不同方法的跨域行为。

示例代码:
java 复制代码
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";
    }
}

总结:

  • 全局配置 适用于需要为整个应用配置跨域支持的场景。
  • 控制器级别配置 适用于为某个控制器的所有方法配置跨域支持的场景。
  • 方法级别配置 适用于为具体的某个方法配置跨域支持的场景。
相关推荐
j***495616 分钟前
Windows操作系统部署Tomcat详细讲解
java·windows·tomcat
草莓熊Lotso22 分钟前
unordered_map/unordered_set 使用指南:差异、性能与场景选择
java·开发语言·c++·人工智能·经验分享·python·网络协议
20岁30年经验的码农2 小时前
Spring Cloud Gateway 网关技术文档
java
likuolei3 小时前
XML DOM 节点类型
xml·java·服务器
w***74405 小时前
SpringBoot项目如何导入外部jar包:详细指南
spring boot·后端·jar
ZHE|张恒5 小时前
Spring Bean 生命周期
java·spring
tsumikistep6 小时前
【前后端】接口文档与导入
前端·后端·python·硬件架构
q***38517 小时前
SpringCloud实战十三:Gateway之 Spring Cloud Gateway 动态路由
java·spring cloud·gateway
小白学大数据7 小时前
Python爬虫伪装策略:如何模拟浏览器正常访问JSP站点
java·开发语言·爬虫·python
码事漫谈7 小时前
为什么C语言拒绝函数重载?非要重载怎么做?
后端