SpringBoot前后端分离解决跨域问题的三种解决方案

🚀🚀扎哇太枣糕的博客首页🚀🚀**
在这里插入图片描述

文章目录

  • 🍊什么是跨域
  • 🍊跨域问题的解决策略
  • 🍊三种解决方法


🍊什么是跨域

  想要知道什么是跨域的话,我们可以通过一个小案例简单了解一下跨域的概念:在项目代码编写的时候,我们将前端项目代码和后端的项目代码相分离开,一个运行在本地的8080端口一个运行在本地的8888端口,这也就是我们常说的前后端分离项目。现在使用前端的请求去调用后端的接口,就会产生以下的错误

Access to XMLHttpRequest at 'http://localhost:8888/请求名' 
from origin ‘http://localhost:8080’ has been blocked by 
CORS policy: No ‘Access-Control-Allow-Origin’ 
header is present on the request resource.

  错误原因:基于浏览器的保护机制,当请求中缺少了一些http头信息时,读取响应的操作就会被阻止。出现这个问题并不是说后端没有接收到前端发送过来的请求,相反后端接收请求并且将响应信息返回给了前端,但是返回的响应信息被前端浏览器所拦截了。
  这个保护机制就是浏览器的一种重要的安全策略——同源策略,该策略可以限制不同源之间的交互行为,从而有效避免一些浏览器层面的攻击。所谓的同源就是指url中的协议、域名、端口三个都相同。反观案例的url前端http://localhost:8080请求http://localhost:8888/请求名,协议和域名都相等但是端口却不一样导致两个是不同源,不同源的话就会产生跨域问题。

🍊跨域问题的解决策略

  CROS(Cross Origin Resource Sharing)策略,全称为跨域资源共享策略,是后端用来解决跨域问题的一个方案(当然前端也有解决跨域问题的对应方案),抛开底层具体的解决原理不说,今天就学习一下如何借助该策略实现跨域问题的解决。

🍊三种解决方法

  第一种也是最简单但不常用的一种,只需要在后端接口方法上添加 @CrossOrigin 注解,即可解决对这个接口方法的请求跨域问题,但是在实际开发中一般都会有很多的方法,在每一个方法上都添加这个注解的话明显就会很影响使用感受。当然还可以将注解添加到类上,表示类中的所有方法都解决了跨域问题,但是类也不止一个还是麻烦。

@CrossOrigin
@GetMapping("/请求名")
public String sayHello() {return "hello world !";
}

第二种就是使用过滤器统一处理

// 对比着看,包千万别导错了
import org.springframework.context.annotation.Bean;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;@Configuration
public class CorsConfig {@Beanpublic CorsFilter corsFilter() {CorsConfiguration corsConfiguration = new CorsConfiguration();// 使用通配符* 允许所有的域请求corsConfiguration.addAllowedOrigin("*");// 使用通配符* 允许所有请求头字段corsConfiguration.addAllowedHeader("*");// 使用通配符* 允许所有请求头方法类型corsConfiguration.addAllowedMethod("*");UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();// 处理请求映射source.registerCorsConfiguration("/**", corsConfiguration);return new CorsFilter(source);}
}

第三种就是使用WebMvc的配置类

// 对比着看,包千万别导错了
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**")      // 设置映射.allowedOriginPatterns("*")        // 设置域.allowedMethods("*")               // 设置请求的方式GET、POST等.allowCredentials(true)            // 设置是否携带cookie.maxAge(3600)                      // 设置设置的有效期 秒单位.allowedHeaders("*");              // 设置头}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535069.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ant design vue 树形控件_官宣!vue.ant.design 低调上线

点击右上方,关注开源中国OSC头条号,获取最新技术资讯官宣!官宣!官宣!是的,你没看错就是那个 https://vue.ant.design。至此,Ant Design 已经全面覆盖了 React、Angular、Vue 三大前端框架&#…

哪款笔记本电脑好_扫地机器人哪个牌子好?口碑最好的扫地机器人

随着智能家居的普及,让我们的生活变得越来越智能。扫地机器人的出现完美解决了宠物的毛发问题,为自己腾出了大量的时间。扫地机器人绝对能提升你的生活品质,通过机器内建的智能清洁模式、自定义规划区域进行打扫,使用手机APP进行控…

使用mybatisplus的通用枚举实现存储显示相分离

狡兔尚且三窟,多学一招总没错吧? 🚀🚀扎哇太枣糕的博客首页🚀🚀 🌏 抛出问题 如果让你实现这么一个功能:将性别使用数字存储到数据库中,但是前端需要获取到的是具体的性…

JDK和JRE的区别?main方法的注意点?强制和自动类型转换?

💡涉及的知识点速通🛫 JDK和JRE傻傻分不清?🛫 HelloWorld的输出都经历了啥?🛫 Java的三个版本都是啥?🛫 关于main方法你都知道啥?🛫 强制and自动类型转换都是啥?各位小…

安卓10不支持qmc解码_Root神器支持安卓10 面具Magisk v20.4+Magisk Manager v7.5.1

Magisk的功能和xposed框架的功能差不多,也有很多插件可安装,而且自带root,刷入这个Magisk后你的rom同时也就有root了(支持安卓7.0,7.1,8.0,8.1,9,10)这也是目前安装8.1root的普遍方法,因为目前s…

==和equals判等、空串和null串、字符串常用API

💡涉及的知识点速通🛫 关于变量和常量你都知道啥?🛫 &和&&、|和||有什么区别?🛫 关于字符串的问题你能答对几道?🪂 可以修改一个字符串中的值吗?🪂 字符串使用…

俩台电脑怎么设置同一局域网_方法 | 把手机上的照片传到电脑上

我想把手机上的照片/视频传到电脑上怎么办? 什么云盘,手机助手等等全扔到一边去,不用。请让我慢慢道来:现在,人们手机用的越来越多,即使在大街上,到处都是“低头族”。但是,有好多小伙伴问&…

数据持化技术的发展演变(SQL、JDBC、mybatis)

文章目录1 简单SQL语句1.1 查询1.2 新增1.3 修改1.4 删除1.5 多表查询2 JDBC2.1 什么是JDBC2.2 什么是jar和maven2.3 JDBC的使用2.4 JDBC总结3 mybatis3.1 什么是ORM?为什么是ORM不是JDBC?3.2 mybatis的使用3.3 mybatis总结4 mybatis与jdbc的逻辑相同处环境配置 j…

传统蒙文字体_蒙古要改回使用传统回鹘蒙文,这是种什么文字,蒙古为什么要改回...

喜欢就点关注吧!文字是一个国家的文化象征,也是其书面交流的主要工具,世界上的大多数国家都有自己独特的文字,我们的邻国蒙古也是如此,近日蒙古国实行了一场意义重大的文字改革,据新华社乌兰巴托3月18日报道&#xff0…

三态输出门实验报告注意事项_数电基础知识:各种IO输出的类型

集电极开路(OC)集电极开路输出的结构如图1所示,右边的那个三极管集电极什么都不接,所以叫做集电极开路;左边的三极管为反相之用,使输入为“0”时,输出也为“0”。对于图 1,当左端的输入为“0”时&#xff0…

数据持久化技术——MP

文章目录1 环境搭建1.1 创建一个maven的project1.2 pom.xml文件导入web开发依赖1.3 创建SpringBoot项目的主程序入口2 代码生成器3 配置数据库4 导入前端页面5 开始前端控制器的编码5.1 wrapper构造器mybatis-plus(简称 MP)是一个 MyBatis的增强工具,在 MyBatis 的基…

win7无法连接打印机拒绝访问_如何解决局域网无法访问SQL Server 2008 无法连接到(local)...

初次安装使用SQL server 2008时,可能会遇到无法连接到(local)的情况。那么,如何解决此问题?工具/原料: SQL server 2008方法/步骤1. 打开SQL server 配置管理器-->SQL server 网络配置-->实例名的协议(我的实例名为SQLEXPRESS)。2. 将S…

windows进程管理器_任务管理器就能搞定9成的电脑问题?方法在这里!

90% 对于电脑的不满,都逃不出这几个方面:电脑状态无法随时监测、运行卡顿、开机时间长、莫名黑屏、电池关键时刻不扛使(笔记本电池怎么保养?能不能一直插电源充电?可以戳这里→),很多小伙伴就选择安装第三方软件来解决…

三维网格精简算法java版_ISMAR 2020 | 商汤提出手机端实时单目三维重建系统

导读:商汤研究院和浙江大学CAD&CG国家重点实验室合作研发了一个手机端实时单目三维重建系统Mobile3DRecon。与现有的基于RGBD的在线三维重建或离线生成表面网格的系统不同,该系统结合前端位姿跟踪结果,允许用户使用单目摄像头在线重建场景…

【分类汇总】idea快捷键、idea配置、常用插件

写在前面 千万别看目录很长就感觉本篇博客很絮叨繁琐,里面多是配置的讲解贴了很多的图片方便大家了解,配置成功一次之后就可以一直使用了。 快捷键的使用建议大家先看,后续敲代码的时候刻意的使用快捷键,相信经过两三天的使用就可…

win10设置默认输入法_个性化设置技巧

个性化设置技巧子墨居士前言本次内容主要是win10系统自带的功能,不是用第三方软件优化桌面的情况下,让自己的电脑桌面能更美观、更舒服。系统自身的个性化设置主要是下图中的几个。鼠标右击->个性化设置。 第三方软件的效果会更好,毕竟是专…

什么叫组网_家庭wifi,如何组网最合适

wifi信号通过电磁波在空中传播的,属于微波通信的一种,因为微波本身及发射功率的限制,导致wifi的穿透能力比较差,北方比较厚的承重强,铁门、家具等对都会对wifi信号有较强的削弱作用。穿过的障碍物越多,这种…

java输入输出、数组初始化

💡涉及的知识点速通🛫 关于输入输出你都知道啥?🛫 关于控制路程都需要注意啥?🛫 关于数组的问题你能答对几道?🪂 数组初始化的小细节你都知道吗?🪂 这些Arrays的常见API你都掌握了吗?&#…

linux rm 命令删除文件恢复_Linux之恢复误删除文件

前言每当我们在生产环境服务器上执行rm命令时,总是提心吊胆的,因为一不小心执行了误删,然后就要准备跑路了,毕竟人不是机器,更何况机器也有 bug。那么如果真的删除了不该删除的文件,比如数据库、日志或执行…

java三大特征 重载与重写的区别

💡涉及的知识点速通🛫 OOP的三大特征都是什么?🪂 什么是封装?🪂 什么是继承?🪂 什么是多态?🛫 关于构造器你都知道什么?🛫 关于类的源文件都需要知道什么?🛫 重载和重写都是什…