【Spring Boot 3】【Web】处理跨域资源共享 CORS
【Spring Boot 3】【Web】处理跨域资源共享 CORS
- 背景
- 介绍
- 开发环境
- 开发步骤及源码
- 工程目录结构
- 总结
背景
软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术总是要花费或多或少的时间、检索不止一篇资料才能得出一个可工作的DEMO,这占用了我大量的时间精力。因此本文旨在通过一篇文章即能还原出可工作的、甚至可用于生产的DEMO,期望初学者能尽快地迈过0到1的这一步骤,并在此基础上不断深化对相关知识的理解。
为达以上目的,本文会将开发环境、工程目录结构、开发步骤及源码尽量全面地展现出来,文字描述能简则简,能用代码注释的绝不在正文中再啰嗦一遍,正文仅对必要且关键的信息做重点描述。
介绍
本文介绍开发 Spring Boot Web 应用时如何处理跨域资源共享(CORS)。
跨域资源共享(CORS,Cross-Origin Resource Sharing),是一种基于 HTTP 头的机制,允许服务器标识除了自己以外的其他源(域、协议或端口),使得浏览器允许这些源访问加载自己的资源。
Spring 提供五种方法解决跨域问题:
- 使用
@CrossOrigin注解 Controller 类或方法 - 配置
CorsFilter - 创建实现
WebMvcConfigurer接口的配置类,重写其addCorsMappings方法 - 自定义
Filter - 设置
HttpServletResponse
开发环境
| 分类 | 名称 | 版本 |
|---|---|---|
| 操作系统 | Windows | Windows 11 |
| JDK | Oracle JDK | 21.0.1 |
| IDE | IntelliJ IDEA | 2023.3.7 |
| 构建工具 | Apache Maven | 3.9.9 |
开发步骤及源码
1> 创建Maven工程,添加依赖。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.jiyongliang</groupId><artifactId>springboot3-web</artifactId><version>0.0.1</version></parent><artifactId>springboot3-web-cors</artifactId><properties><java.version>21</java.version><maven.compiler.source>21</maven.compiler.source><maven.compiler.target>21</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><spring-boot.version>3.3.3</spring-boot.version><lombok.version>1.18.34</lombok.version></properties><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boo相关文章:
【Spring Boot 3】【Web】处理跨域资源共享 CORS
【Spring Boot 3】【Web】处理跨域资源共享 CORS 背景介绍开发环境开发步骤及源码工程目录结构总结背景 软件开发是一门实践性科学,对大多数人来说,学习一种新技术不是一开始就去深究其原理,而是先从做出一个可工作的DEMO入手。但在我个人学习和工作经历中,每次学习新技术…...
HUAWEI华为MateBook B5-420 i5 集显(KLCZ-WXX9,KLCZ-WDH9)原装出厂Windows10系统文件下载
适用型号:KLCZ-WXX9、KLCZ-WDH9 链接:https://pan.baidu.com/s/12xnaLtcPjZoyfCcJUHynVQ?pwdelul 提取码:elul 华为原装系统自带所有驱动、出厂主题壁纸、系统属性联机支持标志、系统属性专属LOGO标志、华为浏览器、Office办公软件、华为…...
算法练习题10:leetcode76最小覆盖子串-滑动窗口
目录 题目 题目描述 约束条件 解决思路 代码 getOrDefault(c, 0) 方法 方法签名 参数 返回值 示例 getOrDefault 与 get 的主要区别 Integer 题目 题目描述 给定两个字符串 s 和 t,请你在字符串 s 中找到包含 t 中所有字符的最小子串。 要求…...
Svn常用操作技巧详细说明
TortoiseSVN是一个Windows操作系统下的Subversion客户端,它为用户提供了直观易用的界面,方便进行版本控制操作。下面是一些TortoiseSVN的常用操作技巧的详细说明: 检出代码: 在Windows资源管理器中,选择一个空文件夹&a…...
六、MySQL高级—架构介绍(1)
🌻🌻 目录 一、Mysql 简介1.1 概述1.2 Mysql 高手是怎样炼成的 二、Mysql Linux 版的安装2.1 mysql5.52.2 mysql5.7 三、Mysql 的用户与权限管理3.1 MySQL的用户管理3.2 权限管理3.3 通过工具远程访问 四、 Mysql的一些杂项配置(了解)五、 Mysql 逻辑架构…...
TensorRT-For-YOLO-Series项目:实现yolov10模型的python-tensorrt推理(对比int8与fp16推理差异)
项目地址:https://github.com/Linaom1214/TensorRT-For-YOLO-Series/tree/cuda-python 算法支持状态: 2024.6.16 Support YOLOv9, YOLOv10, changing the TensorRT version to 10.0 2023.8.15 Support cuda-python 2023.5.12 Update 2023.1.7 support YO…...
码上君量化互助社群介绍
写在前面 量化投资是一个漫长的过程,一个人单打独斗会走很多弯路,所以建立一个交流沟通互助群是有必要的。 无论是加入我的这个量化互助社群,还是加入其他的社群,首先要想想自己加入社群的目的是什么,自己想从中获得…...
Qt使用小技巧之按钮动态变化
前言 最近写小demo中无意发现的,是想实现当鼠标悬停到按钮上面的时候,按钮实现动态变化,让人知道鼠标经过了按钮,效果如下 hoverDynamicPushButton 正文 首先是将按钮的边框给去掉,然后设置下它的悬停伪状态就行了 格…...
MySQL——事务与存储过程(三)存储过程的使用(1)调用存储过程
使用存储过程可以使程序执行效率更高、安全性更好,增强程序的可重用性和维护性。接下来将针对存储过程的使用进行详细的讲解。 存储过程有多种调用方法。存储过程必须使用CALL语句调用,并且存储过程和数据库相关,如果要执行其他数据库…...
基于VUE2-dataV和echarts实现的可视化大屏,百分比适配PC端
可视化平台中,数据分别通过仪表盘、环状图、柱形图、曲线图、 滚动表格等多种形式展示数据变化。 可视化平台大致分为左、中、右三部分,左侧由能耗总览、耗能 占比、库存预警构成,中间由数据总览、销售计划完成率构成,右侧 由销售…...
FastAPI模块化:为复杂应用程序提供清晰的结构
开题描述: 在现代软件开发中,随着应用程序规模的扩大和功能的增加,传统的单体架构逐渐暴露出其局限性。FastAPI,作为一款高性能的现代Web框架,通过其模块化设计提供了一种解决方案。本文将探讨FastAPI模块化如何为构建…...
【Hot100】LeetCode—215. 数组中的第K个最大元素
目录 1- 思路快速选择 2- 实现⭐215. 数组中的第K个最大元素——题解思路 3- ACM实现 原题连接:215. 数组中的第K个最大元素 1- 思路 快速选择 第 k 大的元素的数组下标: int target nums.length - k 1- 根据 partition 分割的区间来判断当前处理方式…...
pycharm如何安装selenium
在pycharm中打开一个项目后,点击Setting(ALTCtrlS快捷键) 然后点击install package完成后点击关闭这个窗口,就可以在代码中使用selenium了 成功后出现如下界面 编写一段正常可以运行操作chorme浏览器的 from selenium import webdriver # 指定ChromeDriver的路径driver we…...
css三点闪烁(可用于加载样式、标题等)
代码案例 HTML <div class"flexAlign loading"><div class"loading_item"></div><div class"loading_item"></div><div class"loading_item"></div> </div> <div class"ot…...
支持向量机 (Support Vector Machines, SVM)
支持向量机 (Support Vector Machines, SVM) 通俗易懂算法 支持向量机(SVM)是一种用于分类和回归任务的机器学习算法。在最简单的情况下,SVM是一种线性分类器,适用于二分类问题。它的基本思想是找到一个超平面(在二维…...
上海市计算机学会竞赛平台2024年8月月赛丙组调和级数
题目描述 给定一个整数 nn,记 ⌊x⌋⌊x⌋ 表示不超过实数 xx 的最大整数,请求出 ⌊n1⌋⌊n2⌋⌊n3⌋⋯⌊nn−1⌋⌊nn⌋⌊1n⌋⌊2n⌋⌊3n⌋⋯⌊n−1n⌋⌊nn⌋ 输入格式 单个整数:表示 nn 输出格式 单个整数:表示答…...
【重学 MySQL】二十、运算符的优先级
【重学 MySQL】二十、运算符的优先级 MySQL 运算符的优先级(由高到低)注意事项示例 在 MySQL 中,运算符的优先级决定了在表达式中各个运算符被计算的先后顺序。了解运算符的优先级对于编写正确且高效的 SQL 语句至关重要。以下是根据高权威性…...
十种优化MySQL数据库的最佳建议
优化MySQL数据库可以提高查询性能和系统响应能力,以下是一些MySQL数据库优化的建议: 优化查询语句:避免使用SELECT *,只选择需要的字段;使用索引来加快查询速度;避免使用慢查询。 优化表结构:使…...
springboot组件使用-mybatis组件使用
文章目录 springboot使用mybatis组件1. 添加依赖2. 配置数据源3. 创建实体类4. 创建Mapper接口5. 创建Mapper XML文件6. 使用Mapper7. 启动类配置 mybtis 动态SQL1. Mapper 注解2. Select 注解3. Insert 注解4. Update 注解5. Delete 注解6. Results 注解7. Param 注解8. Cache…...
Ribbon 源码分析【Ribbon 负载均衡】
前言 在 Spring Cloud 2020 版本以后,移除了对 Netflix 的依赖,也就移除了负载均衡器 Ribbon,Spring Cloud 官方推荐使用 Loadbalancer 替换 Ribbon,而在 LoadBalancer 之前 Spring Cloud 一直使用的是 Ribbon 来做负载[均衡器的…...
BurpSuite+SqlMap深度集成:构建高可信SQL注入检测流水线
1. 这不是“点几下就出结果”的玩具,而是你真正能放进渗透流程里的SQL注入检测流水线很多人第一次看到“BurpSuiteSqlMap插件5分钟搞定SQL注入检测”这个标题,第一反应是:又一个标题党?点开全是截图堆砌、参数照抄、报错就卡住的半…...
摆脱论文困扰!2026年最值得拥有的专业AI智能降重工具
2026年论文降AI率工具已从“基础改写”升级为多维度智能优化系统,核心评价维度涵盖AI生成内容识别精度、语义逻辑一致性、学术格式合规性、查重适配能力及多语言处理水平。本次测评覆盖6款主流工具,测试场景包括中文与英文论文、全流程与专项功能、免费与…...
VMnet8 的8到底是什么意思?
它的本质是:8 仅仅是一个 内部标识符 (Internal Identifier) 或 数组索引 (Array Index),用于在 VMware 的虚拟化网络栈中唯一标识 NAT 模式 对应的虚拟交换机实例。它没有任何数学、物理或协议层面的特殊含义(如端口号、版本号或二进制位&am…...
DeepSeek代码解释能力突袭测评(企业级代码理解天花板大起底)
更多请点击: https://intelliparadigm.com 第一章:DeepSeek代码解释能力突袭测评(企业级代码理解天花板大起底) DeepSeek-R1 在代码理解任务中展现出远超通用大模型的专项能力,尤其在跨语言语义对齐、上下文敏感逻辑还…...
Mac窗口置顶神器Topit:3分钟提升多任务效率的终极指南
Mac窗口置顶神器Topit:3分钟提升多任务效率的终极指南 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否经常在Mac上同时处理多个任务ÿ…...
解决WSL中RViz全屏闪烁和字体缩小情况
针对WSL中,ROS2-humble打开RViz2全屏后,地图闪烁的情况:我从网上找,问了ai,试了很多种方法,终于找到一种适合我的方法,有相同情况的朋友可以试一试,但是不保证你的问题和解决方法与我…...
如何免费破解百度网盘限速:Python直链解析工具终极指南
如何免费破解百度网盘限速:Python直链解析工具终极指南 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘的龟速下载而烦恼吗?想要免费享受…...
openpilot终极指南:如何为你的爱车快速添加自动驾驶辅助功能
openpilot终极指南:如何为你的爱车快速添加自动驾驶辅助功能 【免费下载链接】openpilot openpilot is an operating system for robotics. Currently, it upgrades the driver assistance system on 300 supported cars. 项目地址: https://gitcode.com/GitHub_T…...
从Windows/Ubuntu到麒麟V10:给双系统玩家的分区避坑指南(附ESP/SYSBOOT详解)
从Windows/Ubuntu到麒麟V10:双系统分区规划全解析当你在已有Windows或Ubuntu的电脑上准备安装银河麒麟V10桌面版时,分区规划往往是第一个需要跨越的技术门槛。不同于单系统安装的"下一步"式操作,多系统共存需要对磁盘布局有更深入的…...
原神启动器打不开?手把手教你排查并修复Windows上Qt插件路径冲突问题(附环境变量管理技巧)
原神启动器故障排查:彻底解决Qt插件路径冲突的完整指南当您满心期待地双击原神启动器图标,却看到"no Qt platform plugin could be initialized"的错误提示时,这种挫败感我深有体会。作为一名同样热爱游戏的Windows用户,…...
