Spring Boot 中解决跨域的多种方式

Spring Boot 中解决跨域的多种方式

  • 《踏过跨域障碍:Spring Boot 中解决跨域的多种方式》
    • 摘要
    • 引言
    • 正文
      • 何为跨域
      • 跨域问题出现特征
      • 方式一:使用 @CrossOrigin 注解
      • 方式二:自定义 WebMvcConfigurer
      • 方式三:使用 Filter 进行跨域配置
    • 结论
    • 参考资料

在这里插入图片描述

博主 默语带您 Go to New World.
个人主页—— 默语 的博客👦🏻
《java 面试题大全》
《java 专栏》
🍩惟余辈才疏学浅,临摹之作或有不妥之处,还请读者海涵指正。☕🍭
《MYSQL从入门到精通》数据库是开发者必会基础之一~
🪁 吾期望此文有资助于尔,即使粗浅难及深广,亦备添少许微薄之助。苟未尽善尽美,敬请批评指正,以资改进。!💻⌨


在这里插入图片描述

《踏过跨域障碍:Spring Boot 中解决跨域的多种方式》

摘要

在开发Web应用时,经常会遇到跨域问题,这给开发者带来了不少困扰。在本文中,我将探讨Spring Boot中解决跨域问题的几种常见方式,包括使用@CrossOrigin注解、自定义WebMvcConfigurer以及使用Filter进行跨域配置。通过深入了解这些方法,我们能够更好地解决跨域问题,保证应用的稳定性和安全性。

引言

跨域问题是指在Web开发中,当一个域(domain)的JavaScript代码去请求另一个域的资源时,浏览器会出于安全考虑阻止这种跨域的行为。在开发过程中,经常会遇到前端与后端不在同一个域的情况,因此跨域问题就显得尤为重要。

正文

何为跨域

跨域是指在浏览器中,一个域下的JavaScript代码试图访问另一个域下的资源时所遇到的限制。这种限制是由同源策略(Same-Origin Policy)所引起的。同源策略要求浏览器只能在同一个域中加载页面和执行脚本,而不能跨域进行操作。

跨域问题出现特征

跨域问题通常表现为浏览器的跨域安全限制,导致前端页面无法获取或操作来自其他域的资源。这可能导致页面功能无法正常工作,或者出现安全漏洞。
在这里插入图片描述

方式一:使用 @CrossOrigin 注解

在Spring Boot中,可以通过在Controller类或方法上添加@CrossOrigin注解来解决跨域问题。这个注解可以指定允许跨域访问的域名、方法、头部信息等。

@CrossOrigin(origins = "*")//允许所有来源的请求跨域
@RestController
public class MyController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}

这种方式解决跨域需要在每个控制器上加注解,属于重复劳动对于不需要精确控制的场景属于重复劳动。可以看下下面方式

方式二:自定义 WebMvcConfigurer

另一种解决跨域问题的方式是通过自定义WebMvcConfigurer来配置跨域策略。这种方式更加灵活,可以针对不同的路径进行不同的跨域配置。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;/*** 跨域配置类。* 允许所有路径的跨域请求。* 配置允许的源地址、请求方法和请求头。* * @author mijiupro*/
@Configuration
public class WebConfig implements WebMvcConfigurer {/*** 配置跨域映射。* * @param registry 跨域注册表*/@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**") // 对所有路径生效.allowedOrigins("*") // 允许所有源地址// .allowedOrigins("https://mijiupro.com","https://mijiu.com ") // 允许的源地址(数组).allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的请求方法.allowedHeaders("*"); // 允许的请求头}
}

这种方式实现了全局的配置,但是无法细腻到控制某个方法

方式三:使用 Filter 进行跨域配置

除了以上两种方式外,还可以通过自定义Filter来处理跨域请求。这种方式可以更加灵活地控制跨域策略,适用于更复杂的跨域场景。

import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;import java.io.IOException;/*** 跨域过滤器。* 用于处理跨域请求。* * @author mijiupro*/
@Component
public class CorsFilter implements Filter {@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 将 ServletResponse 转换为 HttpServletResponseHttpServletResponse httpResponse = (HttpServletResponse) response;// 设置允许跨域请求的源地址httpResponse.setHeader("Access-Control-Allow-Origin", "https://mijiupro.com");// 设置允许的请求方法httpResponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");// 设置允许的请求头httpResponse.setHeader("Access-Control-Allow-Headers", "*");// 继续执行 Filter 链chain.doFilter(request, response);}
}

结论

通过本文的介绍,我们了解了在Spring Boot中解决跨域问题的几种常见方式,包括使用@CrossOrigin注解、自定义WebMvcConfigurer以及使用Filter进行跨域配置。针对不同的场景和需求,我们可以选择合适的方式来解决跨域问题,保证应用的稳定性和安全性。

参考资料

  • Spring Boot CORS documentation

  • Understanding CORS

文章参考:1

在这里插入图片描述


🪁🍁 希望本文能够给您带来一定的帮助🌸文章粗浅,敬请批评指正!🍁🐥

如对本文内容有任何疑问、建议或意见,请联系作者,作者将尽力回复并改进📓;(联系微信:Solitudemind )

点击下方名片,加入IT技术核心学习团队。一起探索科技的未来,共同成长。

在这里插入图片描述

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

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

相关文章

免费无水印视频素材哪里下载?这几个地方您要知道

哟哟,切克闹,视频剪辑达人们,是不是在视频素材的海洋里迷航了?别着急,今天我就给大家分享几个超实用的无水印短视频素材合集网,让你的创作更加得心应手,从此素材不再是你的烦恼 1,蛙…

Vue3与Vue2:对比分析与迁移指南

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

从零学习Linux操作系统 第三十五部分 Ansible中的角色

一、理解roles在企业中的定位及写法 #ansible 角色简介# Ansible roles 是为了层次化,结构化的组织Playbookroles就是通过分别将变量、文件、任务、模块及处理器放置于单独的目录中,并可以便捷地include它们roles一般用于基于主机构建服务的场景中&…

002typeScript面试,1 理解TS类?2 类的继承 3 修饰符 4 抽象类理解 5 枚举类 enum

1 理解TS类? 2 类的继承 3 修饰符 3-1) private 3-2) protected 3-3) readonly 4 抽象类理解 5 枚举类 enum 5-1)枚举模式 5-2)数字枚举 5-3)字符串枚举 5-4)异构枚举

蓝桥杯刷题5--GCD和LCM

目录 1. GCD 1.1 性质 1.2 代码实现 2. LCM 2.1 代码实现 3. 习题 3.1 等差数列 3.2 Hankson的趣味题 3.3 最大比例 3.4 GCD 1. GCD 整数a和b的最大公约数是能同时整除a和b的最大整数,记为gcd(a, b) 1.1 性质 GCD有关的题目一般会考核GCD的性质。   …

Latent Diffusion Models(LDM)环境配置

Latent Diffusion Models GitHub - CompVis/latent-diffusion: High-Resolution Image Synthesis with Latent Diffusion Models LDM环境配置: pip install pytorch-lightning1.6.1 pip install torch1.10.1cu111 torchvision0.11.2cu111 torchaudio0.10.1 -f http…

Vue 3中的reactive:响应式状态的全面管理

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

2024年【电工(初级)】考试题及电工(初级)考试报名

题库来源:安全生产模拟考试一点通公众号小程序 电工(初级)考试题是安全生产模拟考试一点通总题库中生成的一套电工(初级)考试报名,安全生产模拟考试一点通上电工(初级)作业手机同步…

复盘-PPT

调整PPT编号起始页码在设计→幻灯片大小 设置所有以及文本项目符号 ## 打开母版,找到对应级别设置重置 当自动生成的smartart图形不符合预期时

redis详解之redis的简介,初始认识,指令以及应用场景(和MySQL对比)未完

Redis简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: 1、Redis支持数据的持久化,可以将内存中的数据保持在磁盘中,重启的时候可以 再…

机器视觉在智能工厂中的核心作用

机器视觉技术在智能工厂中发挥着至关重要的作用,它不仅能够大幅提升生产效率,还能够显著提高产品质量。在选择机器视觉系统时,传统工业智能视觉设备因其紧凑的设计和高度集成化而受到青睐,而嵌入式机器视觉系统则因其配置的灵活性…

打印机项目需求

打印机项目需求 工作情况如下 我拿着一张带有二维码的纸张对准“打印机的摄像头”“打印机的摄像头”解析我的二维码假如解析后的二维码内容是:24030924发送一个http请求:https://…/getMessage?code24030924外部服务器会返回一个json数据{‘地址’:‘…

适配器模式已经在SpringMVC中的源码实现

介绍: 1、适配器模式将某个类的接口转换成客户端期望的另一种接口表示 2、目的:兼容性,让原本因接口不匹配不能一起工作的两个类可以协同工作。其别名为:包装器。 3、属于:结构型模式 4、分3类:1&#xff0…

c语言:辛巳蛇宝男

辛巳蛇宝男 任务描述 2001年01月24日是农历辛巳蛇年的春节(大年初一),2002年02月11日是辛巳蛇年的除夕。赵中瑞的生日是2002年01月07日,所以我们称他为“辛巳蛇宝男”,赵中瑞想知道还有谁和他一样是“辛巳蛇宝男”,你帮他找出来…

leetcode 134.加油站

本题运用暴力的形式确实是可以的,但是在于暴力的话会非常的麻烦,需要在循环中不断的判断特殊条件。 这里需要用到贪心的算法: 首先我们可以想,既然我们已经知道了在当前加油站的加油量和从当前加油站到下一个加油站耗费的油量&a…

难❗️计算机考研408难度又破新高!

24年408考研,如果只用王道的复习资料,最多考100-120分 就是这么的现实,王道的资料虽然好,但是并不能覆盖全部的知识点和考点,而且24年的408真题考的很怪,总结起来就是下面这些特点: 偏&#x…

多线程求解5千万内有多少个质数?

单线程的解法 如下&#xff1a; #include <iostream>using namespace std;static bool isPrime(int num) {if (num 1){return false;}if ((num 2) || (num 3)){return true;}int mod num % 6; if ((mod ! 1) && (mod ! 5)){return false;//不是6的倍数1的&…

数电学习笔记——逻辑函数的代数法化简

目录 逻辑函数的化简原则 与或逻辑的化简 1、吸收律(1) ( ABABA) 2、吸收律(2)(3)( AABA&#xff1b;AABAB) 3、多余项定律( ABACBCABAC) 4、拆项法 5、添项法 逻辑函数的化简原则 (1)逻辑函数所用的门最少 (2)各个门的输入端要少 (3)逻辑电路所用的级数要少 (4)逻辑…

力扣——合并k个升序链表

文章目录 题目解析题目链接题目解析 算法讲解暴力解法利用优先级队列进行优化 代码解析 题目解析 题目链接 首先先把题目连接给大家奉上题目链接 题目解析 严格来说这个题目是非常容易理解的相信大家有了合并两个升序链表来理解这个题目就会非常容易理解了。这个题目的意思就…

linux网络通信(TCP)

TCP通信 1.socket----->第一个socket 失败-1&#xff0c;错误码 参数类型很多&#xff0c;man查看 2.connect 由于s_addr需要一个32位的数&#xff0c;使用下面函数将点分十进制字符串ip地址以网络字节序转换成32字节数值 同理端口号也有一个转换函数 我们的端口号位两个字…