SpringBoot中通过CORS解决跨域问题(实战+剖析)

本文介绍了SpringBoot中如何通过CORS解决跨域问题,包括同源策略、CORS概念、SpringBoot全局配置及源码分析,同时探讨了跨域可能带来的CSRF风险。

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

一、同源策略

前言

在开始实际操作之前,先来聊聊什么是同源策略?许多人都对跨域有一定的误解,认为这是前端工程师的问题,和后端没说什么关系,其实并不是的,说到跨域,就不得不说一下浏览器的同源策略。

简介

同源策略是由美国Netscape(网景)公司提出的一个著名的安全策略,它是目前市面上的浏览器最核心也是最基本的安全功能,现在所有支持JavaScript的浏览器都会使用这个策略。所谓同源是指协议、域名、端口都要相同。同源策略是基于安全层面而提出来了,其实这个策略本身并没有什么问题,但是开发者在开发中由于各种原因会存在跨域的需求。例如:一个大型项目由多个公司来完成,不同公司开发的项目域名和端口一般不同,但是各个公司之间又有数据交互的需求,这时就会存在跨域的需求。

历程

传统的跨域解决方案是JSONP,JSONP虽然能解决跨域,但是它有一个很大的弊端,就是它只支持GET请求,不支持其他类型的请求,但是我们平时常用的还有POST请求,那这种解决方案肯定不行。

而今天我们说的CORS跨域源资源共享)(CORS,Cross-origin resource sharing)是一个W3C标准,它是一份浏览器技术的规范,提供了Web服务从不同网域传来沙盒脚本的方法,以避开浏览器的同源策略,这是JSONP模式的现代版。

在Spring框架中,对于CORS也提供了解决方案,今天来说说SpringBoot中如何实现CORS。

二、举例

第一步】先创建两个SpringBoot项目,一个命名为cors1提供服务,另一个命名为cors2消费服务,第一个默认端口8080即可,第二配置端口为8081,然后在cors1上新建一个Controller,并提供一个get接口,如下:

【cors1 -> HelloController.java】

@RestController
public class HelloController {
   

    @GetMapping("/get")
    public String getData() {
   
        return "hello get cors";
    }
}

【cors2 -> application.properties】

server.port=8081

在cors2项目下的resources/static目录创建一个index.html文件,发送一个简单的get请求,如下:

【cors2 -> index.html】

<!DOCTYPE html>
<html lang="en">
<head
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值