springboot 解决跨域问题 | Spring Boot 24

本文详细介绍了为什么会出现跨域问题、浏览器的同源策略以及非同源限制。重点讨论了五种解决跨域问题的方法,包括在SpringBoot中使用@Configuration、过滤器、拦截器、JSONP和注解实现。此外,还提到了前端解决跨域的策略,如document.domain、window.postMessage()、JSONP和CORS,并提供了具体的实现示例和代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

🍅 作者简介:哪吒,优快云2021博客之星亚军🏆、新星计划导师✌、博客专家💪

🍅 哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师

🍅 关注公众号【哪吒编程】,回复1024,获取Java学习路线思维导图、大厂面试真题、加入万粉计划交流群、一起学习进步

目录

一、为什么会出现跨域问题

二、当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

三、非同源限制

四、解决跨域问题的五种方式

1、SpringBoot中@Configuration解决跨域(推荐)

2、手写过滤器

3、使用Spring拦截器解决跨域问题

4、JSONP实现(仅适用于GET请求,不推荐使用,详细请见六前端中跨域的解决方法)

5、注解实现

6、nginx实现

五、前端中跨域的解决方法

1、设置document.domain解决无法读取非同源网页的cookie问题

2、跨文档通信API:window.postMessage()

3、JSONP

4、CORS


一、为什么会出现跨域问题

出于浏览器的同源策略。

同源策略是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的JavaScript脚本和另外一个域的内容进行交互。

### Spring Boot 中配置 CORS 解决资源共享 #### 方法一:使用 `@CrossOrigin` 注解 在控制器类或特定方法上可以使用 `@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://example.com") @GetMapping("/greeting") public String greeting() { return "Hello, World!"; } } ``` 此代码片段展示了如何通过 `@CrossOrigin` 注解为 `/greeting` 接口启用支持[^3]。 #### 方法二:全局配置 CORS 支持 对于更广泛的需求,比如整个应用程序都需要开启,则可以通过重写 Web 配置的方式来进行全局性的 CORS 设置。这通常是在配置类中完成: ```java @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") // 可以替换为具体的名列表 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS"); } } ``` 上述例子实现了对所有路径 (`/**`) 的访问权限开放给任何来源(`*`) ,并指定了允许的操作方式(GET、POST等)[^1]。 需要注意的是,在实际生产环境中不建议将 `.allowedOrigins()` 设定为 `"*"`, 而应该明确列出信任的站点地址;另外当涉及到 IP 地址而非正式注册过的名时,确保正确填写完整的 URL 形式 (例如 http://192.168.3.16:9999),否则可能会遇到失败的情况[^4]。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

哪 吒

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值