springboot配置cors拦截器与cors解释

文章目录

  • cors?
  • 代码

cors?

CORS(跨域资源共享)的核心机制是 由后端服务器(bbb.com)决定是否允许前端(aaa.com)的跨域请求

当浏览器访问 aaa.com 的页面,并向 bbb.com/list 发起请求时,浏览器会先检查是否跨域:由于 aaa.com 和 bbb.com 的域名不同,属于跨域请求;触发 CORS,浏览器会发送 OPTIONS 预检请求到后端,请求头包含 Origin: aaa.com,服务器(bbb.com)返回响应头

  • Access-Control-Allow-Origin: aaa.com
  • Access-Control-Allow-Credentials: true
  • Access-Control-Allow-Methods: GET, POST // 该字段的目的是明确允许哪些业务 HTTP 方法
    这个接口 options 响应头告知前端 aaa.com 做跨域请求过来是可以的
    如果 cors 验证失败,浏览器会拦截请求并抛出 CORS 错误

其实本质是可以这么理解:具体哪个域名可以请求我的后端服务接口,是由我后端自己控制的,我后端可以控制成让 aaa.com 的域名可以访问,也可以控制成让 bbb.com 的域名可以访问,本质是浏览器先发一个 options 预检请求,通过响应头让浏览器知道能否跨域访问,可以的话就访问了,不可以的话浏览器就报 cors 错误

浏览器发送 OPTIONS 预检请求的唯一前提是 跨域且非简单请求,如果请求是同源的,无论是否为非简单请求,浏览器都不会发送 OPTIONS 预检请求

特殊的:
简单请求:请求 method 是 get/post/head 其一,且 req header 只能包含

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type(值只能是 application/x-www-form-urlencoded 或者 multipart/form-data 或者 text/plain)
    如果是简单请求,即使浏览器域名和页面接口请求域名不一致,也不会触发浏览器 cors,自然也不需要预检请求 options
    简单请求之所以不会触发 cors,是因为浏览器这些请求风险较低,

代码

拦截器:

@Component
public class CorsInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {// 先判断 reqHeader 中 Origin 对应的浏览器访问的域名如果是后端允许跨域的域名 aaa.com,是的话,后续就塞入到 Access-Control-Allow-Origin 中,表示告诉前端,这个域名的跨域请求是被允许的response.setHeader("Access-Control-Allow-Origin", "aaa.com");response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");response.setHeader("Access-Control-Allow-Headers", "Content-Type, Authorization");response.setHeader("Access-Control-Allow-Credentials", "true");response.setHeader("Access-Control-Max-Age", "3600");return true;}
}

注册拦截器:

@Configuration
public class WebConfig implements WebMvcConfigurer {@Autowiredprivate CorsInterceptor corsInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(corsInterceptor).addPathPatterns("/**") // 所有路径生效.excludePathPatterns("/public/**"); // 排除无需跨域的路径}
}

也有其他方式配置 cors:

@Configuration
public class CorsConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("aaa.com").allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").allowedHeaders("Content-Type", "Authorization").allowCredentials(true).maxAge(3600);}
}

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

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

相关文章

国芯思辰| 同步降压转换器CN2020应用于智能电视,替换LMR33620

在智能电视不断向高画质、多功能、智能化发展的当下,其内部电源管理系统的性能至关重要。同步降压转换器可以为智能电视提供稳定、高效的运行。 国芯思辰CN2020是一款脉宽调制式同步降压转换器。内部集成两个功率MOS管,在4.5~18V宽输入电压范围内可以持…

API 版本控制:使用 ABP vNext 实现版本化 API 系统

🚀API 版本控制:使用 ABP vNext 实现版本化 API 系统 📚 目录 🚀API 版本控制:使用 ABP vNext 实现版本化 API 系统一、背景切入 🧭二、核心配置规则 📋2.1 前置准备:NuGet 包与 usi…

Android高级开发第四篇 - JNI性能优化技巧和高级调试方法

文章目录 Android高级开发第四篇 - JNI性能优化技巧和高级调试方法引言为什么JNI性能优化如此重要?第一部分:JNI性能基础知识JNI调用的性能开销何时使用JNI才有意义? 第二部分:核心性能优化技巧1. 减少JNI调用频率2. 高效的数组操…

小白的进阶之路系列之十----人工智能从初步到精通pytorch综合运用的讲解第三部分

本文将介绍Autograd基础。 PyTorch的Autograd特性是PyTorch灵活和快速构建机器学习项目的一部分。它允许在一个复杂的计算中快速而简单地计算多个偏导数(也称为梯度)。这个操作是基于反向传播的神经网络学习的核心。 autograd的强大之处在于它在运行时动态地跟踪你的计算,…

43. 远程分布式测试实现

43. 远程分布式测试实现详解 一、远程测试环境配置 1.1 远程WebDriver服务定义 # Chrome浏览器远程服务地址 chrome_url rhttp://localhost:5143# Edge浏览器远程服务地址 edge_url rhttp://localhost:9438关键概念:每个URL对应一个独立的WebDriver服务典型配置…

Python爬虫(40)基于Selenium与ScrapyRT构建高并发动态网页爬虫架构:原理、实现与性能优化

目录 一、引言二、技术背景1. 动态页面处理痛点2. 架构设计目标 三、核心组件详解1. Selenium Grid集群部署2. ScrapyRT服务化改造3. 智能等待策略 四、系统架构图五、性能优化实践1. 资源隔离策略2. 并发控制算法3. 监控体系 六、总结与展望🌈Python爬虫相关文章&a…

【存储基础】SAN存储基础知识

文章目录 1. 什么是SAN存储?2. SAN存储组网架构3. SAN存储的主要协议SCSI光纤通道(FC)协议iSCSIFCoENVMe-oFIB 4. SAN存储的关键技术Thin Provision:LUN空间按需分配Tier:分级存储Cache:缓存机制QoS&#x…

TDengine 运维——巡检工具(定期检查)

背景 TDengine 在运行一段时间后需要针对运行环境和 TDengine 本身的运行状态进行定期巡检,本文档旨在说明如何使用巡检工具对 TDengine 的运行环境进行自动化检查。 安装工具使用方法 工具支持通过 help 参数查看支持的语法 Usage: taosinspect [OPTIONS]Check…

DHCP应用

一、DHCP介绍 在LAN(局域网)中我们常会遇到以下的情况: 1.不知道如何配置IP地址及相关信息的员工,无法上网;2.IP地址配置冲突,无法上网;3.来访用户因不熟悉公司网络情况无法上网; 以上这些情况都是日常最…

LabVIEW多按键自动化检测系统

LabVIEW开发一套高精度按键力与行程自动化检测系统,针对传统检测设备自动化程度低、定位误差大等痛点,实现多按键产品的全流程自动化测试。系统集成 6 轴工业机器人、高精度传感器及实时数据处理模块,满足汽车电子、消费电子等领域对按键手感…

嵌入式硬件篇---蜂鸣器

蜂鸣器是一种常用的电子发声元件,主要分为有源蜂鸣器和无源蜂鸣器两类。它们在结构、工作原理、驱动方式、应用场景等方面存在显著差异。以下是详细介绍: 一、核心定义与结构差异 1. 有源蜂鸣器 定义: “有源” 指内部自带振荡电路&#x…

600+纯CSS加载动画一键获取指南

CSS-Loaders.com 完整使用指南:600纯CSS加载动画库 🎯 什么是 CSS-Loaders.com? CSS-Loaders.com 是一个专门提供纯CSS加载动画的资源网站,拥有超过600个精美的单元素加载器。这个网站的最大特色是所有动画都只需要一个HTML元素…

国内高频混压PCB厂家有哪些?

一、技术领先型厂商(聚焦材料与工艺突破) 猎板PCB 技术亮点:真空层压工艺实现FR-4与罗杰斯高频材料(RO4350B/RO3003)混压,阻抗公差3%,支持64单元/板的5G天线模块,插损降低15%。 应用…

volatile,synchronized,原子操作实现原理,缓存一致性协议

文章目录 缓存一致性协议(MESI)volatile1. volatile 的作用2.volatile的底层实现3,volatile 实现单例模式的双重锁(面手写) synchronized1,基本用法2,可重入性3,Java对象头4,实现原理(1)代码块同步的实现&a…

webfuture:如何屏蔽后台发文界面的保存为新文章按钮?

问题描述: 如何屏蔽后台发文界面的保存为新文章按钮? 问题解决:修改这个文件 /Admin/Content/Base/css/base.css 定义这个的id saveAsNewItemSubmit #saveAsNewItemSubmit{display: none;}

SpringBoot集成第三方jar的完整指南

原文地址:https://blog.csdn.net/weixin_43826336/article/details/141640152?ops_request_misc%257B%2522request%255Fid%2522%253A%25227d4118ef2d572ba4428caf83f1d2bb28%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id7d4118…

题目 3293: 蓝桥杯2024年第十五届决赛真题-数位翻转

题目 3293: 蓝桥杯2024年第十五届决赛真题-数位翻转 时间限制: 2s 内存限制: 192MB 提交: 1046 解决: 318 题目描述 小明创造了一个函数 f(x) 用来翻转 x 的二进制的数位(无前导 0)。比如f(11) 13,因为 11 (1011)2,将其左右翻转…

word为跨页表格新加表头和表名

问题: 当表格过长需要跨页时(如下图所示),某些格式要求需要转页接排加续表。 方法一: 1、选中表格,在“表布局”区域点开“自动调整”,选择“固定列宽”(防止后续拆分表格后表格变…

Ubuntu上进行VS Code的配置

1. 安装VS code sudo snap install code --classic 2. 安装GCC sudo apt install build-essential 3. 安装VS Code中文包 打开 VS Code 点击左侧活动栏中的扩展图标(或按Ctrl+Shift+X) 在搜索框中输入:Chinese (Simplified) 选择由 Microsoft 提供的 中文(简体)语言包…

vr中风--数据处理模型搭建与训练2

位置http://localhost:8888/notebooks/Untitled1-Copy1.ipynb # -*- coding: utf-8 -*- """ MUSED-I康复评估系统(增强版) 包含:多通道sEMG数据增强、混合模型架构、标准化处理 """ import numpy as np impor…