刚入职的后端开发问我SpringBoot如何跨域配置?我表示

简介: 跨域,一个老生常谈的话题,不管前端后端,跨域都会遇到。而今天,我就跟大家分享一篇关于【跨域】的文章,希望能给大家带来点不一样的收获。

1. 前言

跨域,一个老生常谈的话题,不管前端后端,跨域都会遇到。而今天,我就跟大家分享一篇关于【跨域】的文章,希望能给大家带来点不一样的收获。

2. 环境说明

js复制代码环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

3. 什么是跨域?

首先,请问大家个问题,什么是跨域?估计很多小伙伴都会这么回答,跨域不就是只要请求的 url 不同,就会造成跨域,没错,是这样的,可否具体点?

所谓跨域,其实就好比这样,A端向B端发送请求,若B端的地址协议、域名、端口三者之间任意一个与A端的址协议、域名、端口中的一个不同,这两者访问就跨域了。

给大家举几个跨域的例子,辅助大家理解。

1.http://localhost:8080/ -> http://localhost:9090/ 跨域原因:端口号不同。


2.http://10.10.10.10:8080/ -> http://20.20.20.20:8080/ 跨域原因:主机ip(域名)不同。

3.http://localhost:8080/ -> https://localhost:8080/ 跨域原因:域名不同(http/https)。

4.www.test.com/ -> test.test.com/ 跨域原因:子域名不同。

4. 为什么会跨域?

既然清楚了跨域概念,那你们知道为何会出现跨域嘛?这其实就得从浏览器层出发了。之所以会产生跨域,就是由于浏览器的同源策略,浏览器对javascript施加的一种安全限制。

所谓同源策略,可以看成是一种约定,它是浏览器最核心也是最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能都可能会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。同源策略会阻止一个域的。javascript脚本和另外一个域的内容进行交互。所谓同源(即指在同一个域)就是两个页面具有相同的协议,域名和端口。

5. 如何解决跨域?

当我们对跨域概念有一定的基础认知之后,我们就应该要学习如何解决跨域这种问题,你知道跨域,但你如果不会处理跨域,那就很掉身份啦,因为解决跨域的方式很多很多,你只需要知道常用的几种处理方式就好了,又不是让自己都得掌握,对吧。

所以,接下来,我给大家诺列了解决跨域的一些方法,不要求大家都能掌握,但好歹知道这种方式能处理跨域即可。具体如下:

1.改发jsonp

利用的是 script 标签 src 属性请求 js 无跨域问题,但具有局限性,只能发送 get 请求.

2.跨域资源共享(CORS)

CORS是一个W3C标准,全称是"跨域资源共享",它允许浏览器向跨源服务器发出XMLHttpRequest请求,从而解决了ajax只能同源使用的限制。但CORS需要浏览器和服务器都同时支持。目前,所有浏览器都支持该功能;支持各种方式请求(post,get....)。

3.nginx代理跨域

将不同的协议、域名、端口代理到与目标url一致的处理方式。

4.nodejs中间件代理跨域

在本地启一个nodeis服务器转接代理,前端请求本地服务器,可在自己代码中设置跨域可访问,而后端转接请求后端是没有跨域问题的(需要真实请求的地址设置可访问才可取得数据)。

5.WebSocket协议跨域

它是一种浏览器的API,它的目标是在一个单独的持久连接上提供全双工、双向通信。(同源策略对web sockets不适用)web sockets原理:在JS创建了web socket之后,会有一个HTTP请求发送到浏览器以发起连接。取得服务器响应后,建立的连接会使用HTTP升级从HTTP协议交换为web sockt协议。 只有在支持web socket协议的服务器上才能正常工作。

6. springboot跨域配置

接着,我们通过在springboot项目中配置cors,起到防止跨域的目的。由于springboot本身就支持cors,所以你只需要实现 addCorsMappings 接口,就可以添加规则来允许跨域访问,具体代码如下,大家请看:

typescript复制代码/**
 * 跨域配置
 */
@Configuration
public class CorsConfig implements WebMvcConfigurer {
   /**
    * 跨域注册器
    *
    * @param registry 跨域注册器
    */
   @Override
   public void addCorsMappings(CorsRegistry registry) {
      // 设置允许跨域的路径
      registry.addMapping("/**")
            // 设置允许跨域请求的域名
            .allowedOrigins("*")
            // 是否允许证书 不再默认开启
            .allowCredentials(true)
            // 设置允许的方法
            .allowedMethods("*")
            // 设置允许的头
            .allowedHeaders("*")
            // 跨域允许时间
            .maxAge(3600);
   }
}

通过上面的配置,我们可以看到,是火力全开啊,把所有的拦截都放开了,允许了所有的跨域域名等。你也可以单独设置添加,比如限制只允许www.test.com的域名访问,那你可以这么设置:

arduino复制代码.allowedOrigins("http://www.test.com")

再比如限定只能对 /test 下的所有接口进行跨域访问,同时只能访问 GET 和 POST 方法,那你这样设置即可。

arduino复制代码registry.addMapping("/test/**") .allowedMethods("POST", "GET");

... ...

    ok,以上就是我这期的全部内容啦,如果还想学习更多,你可以看看如下的往期热文推荐哦,每天积累一个奇淫小知识,日积月累下去,你一定能成为令人敬仰的大佬。

「赠人玫瑰,手留余香」,咱们下期拜拜~~

本文就是愿天堂没有BUG给大家分享的内容,大家有收获的话可以分享下,想学习更多的话可以到微信公众号里找我,我等你哦。

相关文章
|
12天前
|
JSON 自然语言处理 前端开发
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
108 72
【01】对APP进行语言包功能开发-APP自动识别地区ip后分配对应的语言功能复杂吗?-成熟app项目语言包功能定制开发-前端以uniapp-基于vue.js后端以laravel基于php为例项目实战-优雅草卓伊凡
|
1天前
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
96 79
|
3月前
|
存储 缓存 负载均衡
后端开发中的性能优化策略
本文将探讨几种常见的后端性能优化策略,包括代码层面的优化、数据库查询优化、缓存机制的应用以及负载均衡的实现。通过这些方法,开发者可以显著提升系统的响应速度和处理能力,从而提供更好的用户体验。
109 6
|
2月前
|
监控 Java 应用服务中间件
SpringBoot是如何简化Spring开发的,以及SpringBoot的特性以及源码分析
Spring Boot 通过简化配置、自动配置和嵌入式服务器等特性,大大简化了 Spring 应用的开发过程。它通过提供一系列 `starter` 依赖和开箱即用的默认配置,使开发者能够更专注于业务逻辑而非繁琐的配置。Spring Boot 的自动配置机制和强大的 Actuator 功能进一步提升了开发效率和应用的可维护性。通过对其源码的分析,可以更深入地理解其内部工作机制,从而更好地利用其特性进行开发。
60 6
|
2月前
|
Java 应用服务中间件 API
【潜意识Java】javaee中的SpringBoot在Java 开发中的应用与详细分析
本文介绍了 Spring Boot 的核心概念和使用场景,并通过一个实战项目演示了如何构建一个简单的 RESTful API。
55 5
|
2月前
|
前端开发 Java 数据库连接
Java后端开发-使用springboot进行Mybatis连接数据库步骤
本文介绍了使用Java和IDEA进行数据库操作的详细步骤,涵盖从数据库准备到测试类编写及运行的全过程。主要内容包括: 1. **数据库准备**:创建数据库和表。 2. **查询数据库**:验证数据库是否可用。 3. **IDEA代码配置**:构建实体类并配置数据库连接。 4. **测试类编写**:编写并运行测试类以确保一切正常。
93 2
|
2月前
|
前端开发 NoSQL Java
【Java若依框架】RuoYi-Vue的前端和后端配置步骤和启动步骤
本文介绍了如何配置和启动基于Java的若依(RuoYi)项目,涵盖后端和前端的详细步骤。首先,准备Redis、MySQL以及IDE(如Idea和VS)。接着,通过GitHub获取代码并导入到IDE中,执行必要的SQL文件和配置数据库密码。然后,启动Redis并进行相关配置。最后,按照前端配置步骤克隆前端代码库,打开终端执行命令完成前端配置。整个过程详细记录了每一步的操作,帮助开发者顺利部署若依项目。 如果你觉得有帮助,请点赞、关注和收藏,这将是我持续分享的动力!
654 1
|
3月前
|
存储 JavaScript 前端开发
基于 SpringBoot 和 Vue 开发校园点餐订餐外卖跑腿Java源码
一个非常实用的校园外卖系统,基于 SpringBoot 和 Vue 的开发。这一系统源于黑马的外卖案例项目 经过站长的进一步改进和优化,提供了更丰富的功能和更高的可用性。 这个项目的架构设计非常有趣。虽然它采用了SpringBoot和Vue的组合,但并不是一个完全分离的项目。 前端视图通过JS的方式引入了Vue和Element UI,既能利用Vue的快速开发优势,
182 13
|
3月前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
237 3
|
Java
SpringBoot 2.7.0 处理跨域的问题
SpringBoot 2.7.0 处理跨域的问题
790 0

热门文章

最新文章