建议收藏Spring Boot 实现跨域的 5 种方式,总有一种适合你!

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

  • 二、什么是跨域

  • 三、非同源限制

  • 四、java 后端 实现 CORS 跨域请求的方式

    • 1.返回新的 CorsFilter(全局跨域)

    • 2. 重写 WebMvcConfigurer(全局跨域)

    • 3. 使用注解 (局部跨域)

    • 4. 手动设置响应头(局部跨域)

    • 5. 使用自定义filter实现跨域


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

出于浏览器的同源策略限制,网站之间的交互是受到一定限制的。同源策略(Same Origin Policy)是一种约定,它是浏览器最核心也最基本的安全功能。同源策略的作用在于限制一个网页文档或一个脚本如何能够与另一个源的资源进行交互。如果缺少了同源策略,那么浏览器的正常功能可能会受到影响,甚至会被恶意攻击者利用。可以说,Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

同源策略的具体实现是通过阻止一个域的 JavaScript 脚本和另外一个域的内容进行交互。所谓同源,就是两个页面具有相同的协议(protocol)、主机(host)和端口号(port)。因此,如果两个页面的 URL 中协议、主机或端口号有任何一个不同,就会被浏览器视为不同源。同源策略会阻止 JavaScript 代码访问跨域的 DOM 对象,防止恶意脚本窃取用户的信息或者破坏其他网站的正常运行。

 

二、什么是跨域

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

 

三、非同源限制

  1. 无法读取非同源网页的 Cookie、LocalStorage 和 IndexedDB

  2. 无法接触非同源网页的 DOM

  3. 无法向非同源地址发送 AJAX 请求

四、java 后端 实现 CORS 跨域请求的方式

对于 CORS的跨域请求,主要有以下几种方式可供选择:

  1. 返回新的CorsFilter

  2. 重写 WebMvcConfigurer

  3. 使用注解 @CrossOrigin

  4. 手动设置响应头 (HttpServletResponse)

  5. 自定 web filter 实现跨域

注意:

  • CorFilter / WebMvConfigurer / @CrossOrigin 需要 SpringMVC 4.2以上版本才支持,对应springBoot 1.3版本以上

  • 上面前两种方式属于全局 CORS 配置,后两种属于局部 CORS配置。如果使用了局部跨域是会覆盖全局跨域的规则,所以可以通过 @CrossOrigin 注解来进行细粒度更高的跨域资源控制。

  • 其实无论哪种方案,最终目的都是修改响应头,向响应头中添加浏览器所要求的数据,进而实现跨域

1.返回新的 CorsFilter(全局跨域)

在任意配置类,返回一个 新的 CorsFIlter Bean ,并添加映射路径和具体的CORS配置路径。

 


2. 重写 WebMvcConfigurer(全局跨域) 

 

3. 使用注解 (局部跨域)​​​​​​​ 

在控制器(类上)上使用注解 @CrossOrigin:,表示该类的所有方法允许跨域。 

在方法上使用注解 @CrossOrigin: 

4. 手动设置响应头(局部跨域)

使用 HttpServletResponse 对象添加响应头(Access-Control-Allow-Origin)来授权原始域,这里 Origin的值也可以设置为 “*”,表示全部放行。

 

5. 使用自定义filter实现跨域

首先编写一个过滤器,可以起名字为MyCorsFilter.java

 

在web.xml中配置这个过滤器,使其生效 

 

Spring Boot 实现跨域的方式可以帮助你在开发过程中更加灵活的处理前端请求。在实际应用中,你可能会面临各种不同的跨域场景,例如:前端应用和后端服务分离,不同的子域名之间进行数据交互,或者是前端本地开发时需要访问远程服务器等。针对这些不同的场景,Spring Boot 可以提供多种方式来解决跨域问题。

除了本文提到的方式,还有其他的跨域解决方案,例如使用 Nginx 反向代理、使用 JSONP 等。不同的方式在不同的场景下都有其适用性和限制性,需要根据具体情况进行选择。希望本文能够帮助你更好地理解 Spring Boot 实现跨域的方式,同时也希望你能够在实际开发中获得更多的收获和启发。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

永钊源码

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

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

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

打赏作者

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

抵扣说明:

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

余额充值