Spring Boot如何实现跨域资源共享(CORS)?

在这里插入图片描述

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

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

🍅 技术交流:定期更新Java硬核干货,不定期送书活动

🍅 点击文末名片,关注公众号【哪吒编程】,回复 1024 ,获取《10万字208道Java经典面试题总结(附答案)》2024修订版pdf,背题更方便,一文在手,面试我有

嗨,你好呀,我是哪吒。

Spring Boot如何实现跨域资源共享(CORS)?

方法一:使用@CrossOrigin注解

在控制器类或者具体的方法上使用@CrossOrigin注解。这个注解是Spring框架自带的,用于允许跨域访问。

@RestController
public class MyController {

    @CrossOrigin(origins = "http://example.com") // 允许指定域名的跨域请求
    @GetMapping("/api/data")
    public ResponseEntity<?> getData() {
        // ...
    }
}

你还可以使用通配符来允许所有域名的跨域请求:

@CrossOrigin(origins = "*") // 允许所有域名的跨域请求

方法二:配置全局CORS

创建一个配置类,使用WebMvcConfigurer的实现来全局配置CORS。

@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/api/**") // 允许跨域请求的路径
                .allowedOrigins("http://example.com") // 允许的域名列表
                .allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的HTTP方法
                .allowedHeaders("*") // 允许的HTTP头
                .allowCredentials(true) // 是否允许证书(cookies)
                .maxAge(3600); // 预请求的有效期
    }
}

同样,你也可以使用通配符来允许所有域名:

registry.addMapping("/api/**")
        .allowedOrigins("*")
        // 其他配置...

注意事项:

  • 使用@CrossOrigin注解时,它只影响带有该注解的控制器或方法。
  • 使用全局CORS配置时,它会影响所有未明确拒绝的跨域请求。
  • 出于安全考虑,生产环境中应该明确允许的域名,而不是使用通配符*。
  • CORS配置中的allowedHeaders参数应该明确指定所需的头信息,而不是使用*,以减少安全风险。

通过以上两种方法,你可以在Spring Boot应用中实现跨域资源共享,从而允许不同域的前端应用访问你的后端服务。

总结一下,Spring Boot 中如何解决跨域问题 ?

在Spring Boot中解决跨域问题,可以采用以下几种方法:

  1. 使用@CrossOrigin注解:可以在控制器类或方法上添加@CrossOrigin注解来允许特定的跨域请求。这个注解支持指定允许的源、方法、头部等信息。
  2. 通过配置文件:在application.properties或application.yml中添加全局的CORS配置,以允许所有域的跨域请求或者限制只允许特定的域名进行跨域请求。
  3. 自定义CorsFilter:创建一个CorsFilter类,实现Filter接口,并在doFilter方法中添加CORS相关的响应头。然后在Spring Boot的主配置类中注册这个过滤器。
  4. 使用WebMvcConfigurer:通过实现WebMvcConfigurer接口的addCorsMappings方法,可以更细致地控制哪些路径需要CORS支持。
  5. 利用第三方库:也可以使用如cors-filter等第三方库来简化CORS配置过程。
  6. 使用ResponseEntity:在返回ResponseEntity时,可以手动设置Access-Control-Allow-Origin等响应头来实现跨域。
  7. 使用全局异常处理:通过全局异常处理机制,捕获特定的异常并设置相应的CORS响应头。
  8. 使用Spring Security:如果项目中使用了Spring Security,还需要确保Spring Security的配置不阻止跨域请求。
  9. 使用代理服务器:在某些情况下,也可以通过设置代理服务器来解决跨域问题,但这通常不是首选方案。
  10. 使用JSONP:对于GET请求,还可以考虑使用JSONP来绕过浏览器的同源策略,但这仅适用于GET请求,并且需要在前端和后端都进行相应的配置。
  11. 使用服务端路由:在服务端使用路由机制,将请求转发到不同的域,从而避免直接跨域。
  12. 使用WebSocket:对于实时通信,可以考虑使用WebSocket协议,它不受同源策略的限制。

跨域问题是由于浏览器的同源策略引起的,它要求只有来自同一源(协议+域名+端口)的脚本才能访问某些资源。在开发前后端分离的应用时,跨域问题是一个常见的挑战,因此了解如何在Spring Boot中解决这个问题是非常重要的。


🏆文章收录于:Spring Boot 进阶实战

哪吒数年工作总结之结晶。

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

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

点击下方名片,回复1024,获取《10万字208道Java经典面试题总结(2024修订版).pdf 》

在这里插入图片描述

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

哪 吒

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

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

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

打赏作者

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

抵扣说明:

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

余额充值