Spring Boot 进阶-Spring Boot中如何解决跨域问题

news2024/11/26 23:40:42

在这里插入图片描述

什么是跨域问题

  浏览器出于安全考虑,会限制跨域访问,就是不允许跨域请求资源,要求协议,IP和端口必须都相同,其中有一个不同就会产生跨域问题,这就是同源策略。

  简单的说A应用只能访问A应用对应的后台返回的数据,B应用只能访问B应用后台的数据,如果A应用通过Ajax请求了B应用对应的后台数据的时候就会出现跨域的问题。但是在实际开发中,这种调用方式又是被大家广泛使用的。

非同源限制

  什么是非同源限制?浏览器为了安全限制了一些操作,限制了一些请求是无法访问非同源的操作的。

  • 无法读取非同源网页的Cookie、LocalStorage和IndexedDB
  • 无法获取到非同源网页的DOM
  • 无法向非同源地址发送Ajax请求操作

CORS技术

  为了解决上述问题,W3C提出了跨院资源共享方案,也就是CORS技术(Cross-Origin Resource Sharing)CORS 可以在不破坏现有规则的情况下,通过后端服务器实现CORS接口,从而实现跨域通信。CORS请求分为两类:简单请求和非简单请求,分别对跨域通信提供了支持操作。

什么是简单请求

  在CORS技术出现之前,在HTTP请求头中不能包含任何的自定义字段,而且HTTP请求信息也不能操作如下的一些

  • Accept
  • Accept_Language
  • Content_Language
  • Last-Event-ID
  • Content-Type(application/x-www-form-urlencoded、multipart/form-data、text/plain)

  根据对简单请求的的分析,CORS的策略是在请求时在请求头中增加一个Origin字段,服务器收到请求后,根据该字段判断是否允许该请求访问。

  • 如果允许,就在HTTP请求头信息中添加Access-Control-Allow-Origin字段,并且返回正确的字段
  • 如果不允许,就不加入该字段处理Access-Control-Allow-Origin字段,还有其他的字段可以描述CORS返回结果
  • Access-Control-Allow-Credentials:可选,用户是否可以发送、处理cookie。
  • Access-Control-Expose-Headers: 可选,可以让用户拿到的字段,有即可字段无论设置与否都可以获取到,包括Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma。

什么是非简单请求

  对于非简单请求的跨源请求,浏览器会在真实请求发出前增加一次OPTION请求,称为预检请求。在预检请求将真实请求的信息,包括请求方法、自定义头字段、源信息添加到HTTP头信息字段中,询问服务器是否允许这样的操作。
  例如在一个GET请求中,与CORS相关的字段有:

  • 请求使用的HTTP方法 Access-Control-Request-Method
  • 请求中包含的自定义头字段Access-Control-Request-Headers

  服务器收到请求时,需要对Origin、Access-Control-Request-Method、Access-Control-Request-Headers 进行验证,验证通过后,会在返回HTTP头信息中添加如下的的内容

  • Access-Control-Allow-Origin:
  • Access-Control-Allow-Methods :真实请求允许的方法
  • Access-Control-Allow-Headers :服务器允许使用的字段
  • Access-Control-Allow-Credentials :是否允许用户发送、处理Cookie
  • Access-Control-Max-Age :预检请求的有效期,单位为秒,有效期内,不会重复发送预检请求

在Spring Boot中如何实现跨域

  对于CORS的跨域请求,主流的解决方案有如下几种

  • 添加跨域配置类
  • 重写WebMvcConfigurer
  • 使用@CrossOrigin注解
  • 手动设置响应头
  • 自定义过滤器

  对于前后端分离的项目还可以通过配置Nginx的方式实现跨域操作

  CorFilter / WebMvConfigurer / @CrossOrigin 需要 SpringMVC 4.2以上版本才支持,对应springBoot 1.3版本以上上面前两种方式属于全局 CORS 配置,后两种属于局部 CORS配置。如果使用了局部跨域是会覆盖全局跨域的规则

  所以可以通过 @CrossOrigin 注解来进行细粒度更高的跨域资源控制。其实无论哪种方案,最终目的都是修改响应头,向响应头中添加浏览器所要求的数据,进而实现跨域

添加跨域配置类

  新建一个全局的跨域配置文件,然后添加对应的Cors跨域信息,包括放行原始域、发送Cookie等操作,代码如下。

@Configuration
public class GlobalCorsConfig {
   

    @Bean
    public CorsFilter corsFilter() {
   
        //1. 添加 CORS配置信息
        CorsConfiguration config = new CorsConfiguration()

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

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

相关文章

国产长芯微LDC5420单通道、16位、串行输入、电流源DAC完全P2P替代AD5420

描述 LDC5420是可编程电流源输出的低成本、精密、完全集成的16位转换器,可满足工业过程控制应用的要求。输出电流范围可编程为4mA至20 mA、0mA至20mA或者0mA至24mA的超量程。输出具有开路保护功能,可以驱动1H的电感负载。这款器件采用10.8 V至40V&#…

全球司库|基于智能化模型算法的高阶应用

连载导语 司库体系建设是企业实现财务数字化转型和资金管理现代化的重要手段,是企业实现战略转型和高质量发展的关键支撑,也是企业应对复杂多变的全球经济环境和风险挑战的重要保障。司库承担着组织中的领导和战略引导作用,越来越多的企业以司…

基于双波长AWG的窄线宽外差拍频激光器

摘要:基于阵列波导光栅的多波长激光源已被证明可以同时提供多个波长和较窄的光线宽。为了产生毫米波信号,我们开发了两种不同的激光结构,并使用光子集成电路进行了单片集成。在这项工作中,我们报告了毫米波范围内的外差信号特性。…

ChatGPT国内中文版镜像网站整理合集(2024/10/06)

一、GPT中文镜像站 ① yixiaai.com 支持GPT4、4o以及o1,支持MJ绘画 ② chat.lify.vip 支持通用全模型,支持文件读取、插件、绘画、AIPPT ③ AI Chat 支持GPT3.5/4,4o以及MJ绘画 1. 什么是镜像站 镜像站(Mirror Site&#xff…

无人机之飞控仿真技术篇

一、无人机飞控仿真技术的定义 无人机飞控仿真技术主要是指飞行控制系统仿真,它是以无人机的运动情况为研究对象,面向对象的复杂系统仿真。通过该技术,可以模拟无人机的飞行过程,评估飞行控制系统的性能,优化飞行参数&…

鸿蒙OS启动流程

启动流程(基于openharmony4.1) 系统上电加载内核后,按照以下流程完成系统各个服务和应用的启动: 内核加载init进程,一般在bootloader启动内核时通过设置内核的cmdline来指定init的位置。init进程启动后,会挂载tmpfs,…

Liveweb视频汇聚平台:国标GB28181协议下的视频资源整合与应用

随着安防技术的快速发展和智慧城市建设的推进,视频监控系统作为公共安全、城市管理、企业运营等领域的重要基础设施,其重要性和应用范围不断扩大。在这一过程中,GB/T 28181作为国家标准中关于视频监控设备通信协议的规范,正逐渐受…

Cisco Secure Network Analytics 7.5.1 - 领先的网络检测和响应 (NDR) 解决方案

Cisco Secure Network Analytics 7.5.1 - 领先的网络检测和响应 (NDR) 解决方案 Secure Network Analytics (formerly Stealthwatch) - Network Visibility and Segmentation 请访问原文链接:https://sysin.org/blog/cisco-secure-network-analytics/,…

YOLO11改进|注意力机制篇|引入NAM注意力机制

目录 一、【NAM】注意力机制1.1【NAM】注意力介绍1.2【NAM】核心代码 二、添加【NAM】注意力机制2.1STEP12.2STEP22.3STEP32.4STEP4 三、yaml文件与运行3.1yaml文件3.2运行成功截图 一、【NAM】注意力机制 1.1【NAM】注意力介绍 下图是【NAM】的结构图,让我们简单分…

【VUE】双端比较算法

假设我们有两个虚拟节点 oldVnode 和 newVnode,它们分别对应的DOM结构为: 我们需要将 oldVnode 更新为 newVnode,这时就可以使用双端比较算法了。算法本质上是将新旧节点进行一次交叉比较,尽可能地重复使用已有的节点来达到最小…

【含开题报告+文档+PPT+源码】基于过滤协同算法的旅游推荐管理系统设计与实现

开题报告 旅游业作为一种重要的经济活动,对于一个地区的经济发展和文化传承具有重要意义。泉州作为中国华东地区的重要城市,拥有丰富的自然资源和独特的文化底蕴,吸引了大量的游客。然而,随着旅游业的快速发展,游客数…

将长图按宽度切割保存成小图,‌长图图片切图快速操作

长图图片切图技术如同一把锋利的剑,为编辑高手们披荆斩棘,开辟出一条高效操作与创意实现的道路。面对冗长而信息丰富的长图,如何精准地进行切分,以便更好地编辑、管理与利用,成为了每位追求卓越的编辑高手必须掌握的绝…

计算机毕业设计 基于Hadoop的租房数据分析系统的设计与实现 Python毕业设计 Python毕业设计选题 数据分析【附源码+安装调试】

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

SpringBoot 整合 阿里云 OSS图片上传

一、OOS 简介 ‌阿里云OSS(Object Storage Service)是一种基于云存储的产品,适用于存储和管理各种类型的文件,包括图片、视频、文档等。‌ 阿里云OSS具有高可靠性、高可用性和低成本等优点,因此被广泛应用于各种场景&…

能源监控大数据界面,洞察一切生产态势

能源监控大数据界面犹如一扇洞察一切生产态势的神奇之窗。在这个界面上,丰富的数据以直观的图表、动态的图形和醒目的数字呈现出来。 通过色彩鲜明的仪表盘,能清晰地了解能源的实时消耗情况,红色区域的警示提醒着可能存在的能源浪费或异常情…

【exp报错注入】

整数范围 最大整数 exp 函数介绍 报错盲注注入 payload分析 709C-ASCII 值就等于我们下面的 7091-1 ,C就是我们要猜的值,当我们猜测的值和ASCII码相等时,那么exp就不会出现报错,因为1-1还是等于709: 练习 id1 an…

wordpress使用popup弹窗插件的对比

您在寻找最好的 WordPress 弹出插件吗?大多数网站利用某种形状或形式的弹出窗口来将访问者指向他们希望他们去的地方。例如,这可能用于结帐、电子邮件订阅或用于生成潜在客户。 表现 弹出插件会减慢您的网站速度。当插件使用 WordPress 跟踪弹出窗口的…

《网络安全自学教程》- Nmap使用及扫描原理分析

《网络安全自学教程》 Nmap(Network Mapper)是一款免费的开源网络扫描器,向目标主机发送特定的数据包,根据返回的流量特征,分析主机信息。主要功能有:「端口扫描」、「主机探测」、「服务识别」和「系统识别…

数学建模算法与应用 第3章 非线性规划及其求解方法

目录 3.1 非线性规划概述 3.2 约束优化问题 3.3 无约束优化问题的Matlab求解 3.4 牛顿法与梯度下降法 Matlab代码示例:梯度下降法求解简单非线性问题 3.5 非线性规划在机器学习中的应用 习题 3 总结 非线性规划(Nonlinear Programming, NLP&…

Vue3入门学习

Vue3入门学习 1. Vue3简介1.1. 【性能的提升】1.2.【 源码的升级】1.3. 【拥抱TypeScript】1.4. 【新的特性】 2. 创建Vue3工程2.1. 【基于 vue-cli 创建】2.2. 【基于 vite 创建】(推荐)2.3. 【一个简单的效果】 3. Vue3核心语法3.1. 【OptionsAPI 与 CompositionAPI】Options…