当前位置: 首页 > news >正文

springboot处理跨域请求

在Spring Boot中处理跨域请求(CORS, Cross-Origin Resource Sharing)通常有几种方法。跨域请求是指从一个域名的网页去请求另一个域名下的资源。为了安全起见,浏览器会阻止这种请求,除非服务器明确允许。

方法一:使用@CrossOrigin注解

这是最简单的方法,直接在Controller类或方法上使用@CrossOrigin注解来指定允许跨域的来源。例如:

@RestController
@CrossOrigin(origins = "http://example.com")
public class MyController {@GetMapping("/hello")public String hello() {return "Hello World";}
}

如果要对所有来源开放,可以将origins属性设置为*

方法二:配置CORS全局设置

如果你需要更细粒度地控制跨域行为,或者希望整个应用都遵循相同的跨域策略,可以通过实现WebMvcConfigurer接口并重写addCorsMappings方法来全局配置CORS。

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("http://example.com").allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS").allowedHeaders("*").allowCredentials(true).maxAge(3600);}
}

在这个例子中:

  • addMapping("/**") 表示对所有路径生效。
  • allowedOrigins 指定了允许的源。
  • allowedMethods 指定了允许的HTTP方法。
  • allowedHeaders 指定了允许的头信息。
  • allowCredentials 设置是否支持凭证(如cookies)。
  • maxAge 设置预检请求的有效期,单位为秒。

方法三:通过过滤器实现CORS

对于更复杂的场景,可能需要通过实现过滤器(Filter)来处理跨域请求。创建一个实现了Filter接口的类,并注册到Spring容器中。

@Component
public class CorsFilter implements Filter {@Overridepublic void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization");if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) req).getMethod())) {response.setStatus(HttpServletResponse.SC_OK);} else {chain.doFilter(req, res);}}// 其他方法...
}

这种方法提供了最大的灵活性,但是也相对复杂一些。

选择哪种方式取决于你的具体需求。对于大多数简单的应用来说,使用@CrossOrigin注解或全局配置就足够了。对于更复杂的需求,考虑使用过滤器来实现更精细的控制。

相关文章:

springboot处理跨域请求

在Spring Boot中处理跨域请求(CORS, Cross-Origin Resource Sharing)通常有几种方法。跨域请求是指从一个域名的网页去请求另一个域名下的资源。为了安全起见,浏览器会阻止这种请求,除非服务器明确允许。 方法一:使用…...

S32G-VNP-RDB2开发环境搭建

下载官方镜像 刷机 cat /proc/partition or df -lh //查看sdcard卡再/dev目录挂在点 export DEVSD/dev/sdb sudo dd iffsl-image-auto-s32g274ardb2.sdcard of${DEVSD} bs1M && sync以上将SD-card插入就可以将开发板启动,串口接UART1,进入Lin…...

分布式唯一ID生成(二): leaf

文章目录 本系列前言号段模式双buffer优化biz优化动态step源码走读 雪花算法怎么设置workerId解决时钟回拨源码走读 总结 本系列 漫谈分布式唯一ID分布式唯一ID生成(二):leaf(本文)分布式唯一ID生成(三&am…...

【开发工具】Git

目录 核心概念基本命令工作流程Commit message Git 是一个分布式版本控制系统,用于跟踪在软件开发过程中对文件的修改。它允许多个开发者协作处理项目,并且可以有效地管理代码的历史记录。以下是 Git 的一些核心概念和功能: 核心概念 仓库 (R…...

【go从零单排】结构嵌套struct embedding

🌈Don’t worry , just coding! 内耗与overthinking只会削弱你的精力,虚度你的光阴,每天迈出一小步,回头时发现已经走了很远。 📗概念 在Go语言中,结构体嵌套(struct embedding)是一…...

Django 详细入门介绍

Django 详细入门介绍 1. 什么是 Django? Django 是一个开源的、用 Python 编写的 Web 框架。它遵循了“快速开发”和“不要重复自己”(DRY)的设计原则,旨在简化复杂的 Web 开发。Django 提供了多种强大的功能模块,如…...

万字长文解读深度学习——循环神经网络RNN、LSTM、GRU、Bi-RNN

🌺历史文章列表🌺 深度学习——优化算法、激活函数、归一化、正则化深度学习——权重初始化、评估指标、梯度消失和梯度爆炸深度学习——前向传播与反向传播、神经网络(前馈神经网络与反馈神经网络)、常见算法概要汇总万字长文解读…...

HDR视频技术之二:光电转换与 HDR 图像显示

将自然界中的真实场景转换为屏幕上显示出来的图像,往往需要经过两个主要的步骤:第一个是通过摄影设备,将外界的光信息转换为图像信息存储起来,本质上是存储为数字信号;第二个是通过显示设备,将图像信息转换…...

【Linux】Linux入门实操——vim、目录结构、远程登录、重启注销

一、Linux 概述 1. 应用领域 服务器领域 linux在服务器领域是最强的,因为它免费、开源、稳定。 嵌入式领域 它的内核最小可以达到几百KB, 可根据需求对软件剪裁,近些年在嵌入式领域得到了很大的应用。 主要应用:机顶盒、数字电视、网络…...

Redis的缓存问题与应对策略

Redis 作为一种高效的缓存系统,在高并发环境下应用广泛,但也面临一些缓存问题,以下是常见问题及其应对策略。 1. 缓存穿透 问题描述 缓存穿透是指请求的数据在缓存和数据库中都不存在,但大量请求直接到达数据库,从而给…...

Java项目实战II基于Spring Boot的智慧生活商城系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。 一、前言 随着科技的飞速发展,人们的…...

每日一题之成绩排序

在N&#xff08;N<30&#xff09;名运动员参加的体操比赛中&#xff0c;有K&#xff08;K<10&#xff09;名裁判给每位运动员分别打分&#xff0c; 按规则每名运动员最后得分需去掉一个最高分和一个最低分&#xff0c; 然后把其他裁判的打分相加&#xff0c;计算得出该运…...

QT Widget:使用技巧

1、Qt中的QString和const char *之间转换&#xff0c;最好用toStdString().c_str()而不是toLocal8Bit().constData()&#xff0c;比如在setProperty中如果用后者&#xff0c;字符串中文就会不正确&#xff0c;英文正常。 2、数据库处理一般建议在主线程&#xff0c;如果非要在…...

深入Zookeeper节点操作:高级功能与最佳实践

Zookeeper之节点基本操作&#xff08;二&#xff09; 在《Zookeeper之节点基本操作&#xff08;一&#xff09;》中&#xff0c;我们介绍了如何创建、读取、更新、删除节点的基本操作。接下来将进一步探讨Zookeeper中节点的进阶操作和更多细节&#xff0c;包括节点的监视&…...

【C++】map和set的介绍及使用

前言&#xff1a; map和 set 是 C STL&#xff08;标准模板库&#xff09;中的两种非常重要的容器&#xff0c;它们基于一种叫做平衡二叉搜索树&#xff08;通常是红黑树&#xff09;的数据结构来实现。在 C 中&#xff0c;map 是一个键值对容器&#xff0c;set 只存储唯一的键…...

从0开始搭建一个生产级SpringBoot2.0.X项目(十)SpringBoot 集成RabbitMQ

前言 最近有个想法想整理一个内容比较完整springboot项目初始化Demo。 SpringBoot集成RabbitMQ RabbitMQ中的一些角色&#xff1a; publisher&#xff1a;生产者 consumer&#xff1a;消费者 exchange个&#xff1a;交换机&#xff0c;负责消息路由 queue&#xff1a;队列…...

GNU/Linux - /proc/sys/vm/drop_caches

/proc/sys/vm/drop_caches 是 Linux 中的一个特殊文件&#xff0c;允许用户释放系统内存中的各种缓存。让我们深入了解一下这项功能的细节&#xff1a; The /proc/sys/vm/drop_caches is a special file in Linux that allows users to free up various caches in the systems …...

ubuntu 22.04 如何调整进程启动后能打开的文件数限制

在 Ubuntu 22.04 中&#xff0c;可以通过修改系统配置来调整进程启动后能够打开的文件数软限制。软限制是指操作系统允许单个进程打开的文件描述符的最大数量。以下是调整该限制的方法&#xff1a; 1. 查看当前限制 首先&#xff0c;你可以通过 ulimit 命令查看当前的软限制和…...

linux基础-完结(详讲补充)

linux基础-完结 一、Linux目录介绍 二、基础命令详细讲解 1. ls&#xff08;列出目录内容&#xff09; 2. cd&#xff08;更改目录&#xff09; 3. clear&#xff08;清除终端屏幕&#xff09; 4. pwd(显示你当前所在的目录) 5. vim(文本编辑器) 6. touch&#xff08;创…...

LoRA:大型语言模型(LLMs)的低秩适应;低秩调整、矩阵的低秩与高秩

目录 LoRA:大型语言模型(LLMs)的低秩适应 一、LoRA的基本原理 二、LoRA的举例说明 三、LoRA的优势 低秩调整、矩阵的低秩与高秩 一、低秩调整(LoRA) 二、矩阵的低秩 三、矩阵的高秩 LoRA:大型语言模型(LLMs)的低秩适应 LoRA(Low-Rank Adaptation of LLMs),…...

YOLOv8植物病害识别检测系统(项目源码+YOLO数据集+模型权重+UI界面+python+深度学习+环境配置)

摘要 植物病害是威胁全球农业产量与质量的主要因素之一&#xff0c;传统的人工识别方法依赖专家经验&#xff0c;效率低、主观性强。本文基于YOLOv8目标检测算法&#xff0c;构建了一套涵盖30类植物及其叶片病害的检测系统&#xff0c;包括苹果、玉米、马铃薯、番茄、葡萄等主…...

[GESP202512 C++ 三级] 选择题第 8 题 ← unsigned int

【题目描述】 在一个特定的计算机系统中&#xff0c;假如 unsigned int 类型需要占用2个字节的存储空间&#xff08;每个字节有8位&#xff09;&#xff0c;则 unsigned int 可以表示的数据范围是&#xff08; A &#xff09; A. 0 ~ 65535 B. 0 ~ 65536 C. -65536 ~ 655…...

BERT PyTorch实现避坑指南:torch.gather()、GELU激活函数与数据预处理那些事儿

BERT PyTorch实现避坑指南&#xff1a;torch.gather()、GELU激活函数与数据预处理那些事儿 当你第一次尝试在PyTorch中实现BERT模型时&#xff0c;可能会遇到一些令人困惑的技术细节。本文将从实际调试的角度&#xff0c;深入解析三个最容易卡住开发者的关键点&#xff1a;torc…...

Bash脚本集成AI:实现自然语言到命令行的自动化运维工具

1. 项目概述&#xff1a;当Bash脚本遇见AI&#xff0c;自动化运维的新范式最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Hezkore/bash-ai”。光看名字&#xff0c;你可能会有点懵&#xff1a;Bash脚本和AI&#xff0c;这两个看似八竿子打不着的玩意儿&#xff0c;怎么…...

MASA模组汉化包终极指南:3分钟告别Minecraft英文界面困扰

MASA模组汉化包终极指南&#xff1a;3分钟告别Minecraft英文界面困扰 【免费下载链接】masa-mods-chinese 一个masa mods的汉化资源包 项目地址: https://gitcode.com/gh_mirrors/ma/masa-mods-chinese 你是否曾在Minecraft中使用Litematica、Minihud等MASA模组时&#…...

基于React与Zustand的现代后台管理系统架构设计与实现

1. 项目概述&#xff1a;一个开源后台管理系统的诞生与价值最近在GitHub上闲逛&#xff0c;又发现了一个挺有意思的项目——duanecilliers/openclaw-admin。这名字起得挺酷&#xff0c;“OpenClaw”&#xff0c;直译过来是“开放之爪”&#xff0c;听起来就带着一股子灵活、可抓…...

ARM PMU中断控制寄存器PMINTENCLR/PMINTENSET详解

1. ARM性能监控单元(PMU)架构概述 在现代处理器设计中&#xff0c;性能监控单元(Performance Monitoring Unit, PMU)是实现系统级性能分析和优化的关键组件。ARM架构从v7开始引入标准化的PMU设计&#xff0c;并在v8/v9架构中持续演进。PMU的核心功能是通过一组可编程事件计数器…...

Cursor AI 规则引擎:自动化编码规范与项目约束实践指南

1. 项目概述&#xff1a;一个为 Cursor 编辑器量身定制的规则引擎如果你和我一样&#xff0c;深度依赖 Cursor 这款 AI 驱动的代码编辑器&#xff0c;那你一定经历过这样的时刻&#xff1a;面对 AI 生成的代码&#xff0c;既惊叹于它的效率&#xff0c;又时常为它不遵守团队规范…...

CTF新手必看:用010 Editor修复PNG图片CRC错误,轻松拿下BUUCTF那道‘一叶障目’题

CTF新手实战&#xff1a;用010 Editor修复PNG图片CRC校验错误 拿到一张打不开的PNG图片&#xff0c;显示"CRC校验失败"&#xff1f;别急着放弃&#xff0c;这可能是CTF比赛中故意设置的陷阱。作为MISC方向的经典题型&#xff0c;修改PNG文件头参数是常见的出题套路。…...

树莓派网络配置全攻略:从有线到无线,新手到进阶

1. 项目概述&#xff1a;为什么网络配置是树莓派的第一课刚拿到一块崭新的树莓派&#xff0c;看着它小巧的主板和闪烁的指示灯&#xff0c;你脑子里想的可能是立刻跑个酷炫的Python项目&#xff0c;或者搭建一个家庭媒体中心。但别急&#xff0c;在这一切开始之前&#xff0c;有…...