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

解决跨域问题(SpringBoot)

“什么是跨域?”

跨域 (Cross-Origin) 是指在浏览器的同源策略(Same-Origin Policy)下,一个网页的源(指协议、域名、端口号的组合)与另一个网页的源不同。因此,不同源的网页之间受到限制,无法直接进行通信。
同源策略(Same-Origin Policy)是一种由浏览器实施的安全机制,旨在限制一个源(指协议、域名、端口号的组合)的网页在脚本中如何与另一个不同源的资源进行交互。该策略的主要目的是防止潜在的恶意网站通过脚本访问用户的敏感信息,增强浏览器的安全性。
具体而言,同源策略限制了通过脚本访问不同源的文档、Cookie、LocalStorage 等资源。当一个网页尝试在脚本中请求另一个不同域的资源时,浏览器会阻止这个请求,以保护用户的隐私和防范潜在的安全威胁。

如何解决:

1.Spring Boot中解决跨域问题有三种主要办法
(1)注解,使用@CrossOrigin注解: 在控制器类或方法上使用@CrossOrigin注解,指定允许的域名、请求方法等。这是一种简单直接的方式/*** 在控制器方法或类上使用 @CrossOrigin 注解,指定允许跨域的配置。* * @param origins 允许访问的域名,可以使用通配符 "*" 表示允许所有域名访问。* @param maxAge 预检请求的缓存时间,单位为秒。在此时间范围内,浏览器无需再次发起预检请求。*/
@RestController
@RequestMapping("/api")
@CrossOrigin(origins = "http://localhost:8080", maxAge = 3600)
public class MyController {// 控制器方法
}origins: 指定允许访问的域名。可以是一个具体的域名,也可以使用通配符 "*" 表示允许所有域名访问。在示例中,只允许来自 http://localhost:8080 的域名发起跨域请求。
maxAge: 预检请求的缓存时间,单位为秒。预检请求是一种 CORS 机制中的预检查步骤,用于确认实际请求是否安全。maxAge 指定了浏览器可以缓存预检请求的时间,即在这个时间范围内,浏览器无需再次发起预检请求。在示例中,设置为 3600 秒(1 小时)。(2)配置全局跨域规则: 创建一个配置类,继承WebMvcConfigurerAdapter,重写addCorsMappings方法,配置全局的跨域设置public class CorsConfig extends WebMvcConfigurerAdapter {/*** 重写 addCorsMappings 方法,配置全局的跨域设置。* @param registry CorsRegistry 对象,用于配置跨域规则。*/@Overridepublic void addCorsMappings(CorsRegistry registry) {// 针对路径 "/api/**" 配置跨域规则registry.addMapping("/api/**")// 允许访问的域名,可以使用通配符 "*" 表示允许所有域名访问.allowedOrigins("http://localhost:8080")// 允许的请求方法,如 GET、POST、PUT、DELETE.allowedMethods("GET", "POST", "PUT", "DELETE")// 是否允许携带凭证信息(如 Cookie).allowCredentials(true)// 预检请求的缓存时间,单位为秒。在此时间范围内,浏览器无需再次发起预检请求.maxAge(3600);}
}(3)使用Filter进行跨域设置: 创建一个CorsFilter过滤器,配置跨域规则,然后在WebApplication中注册这个过滤器。```c
/*** 自定义 CorsFilter 类,继承自 OncePerRequestFilter,用于配置跨域过滤器。*/
@Component
public class CorsFilter extends OncePerRequestFilter {/*** 重写 doFilterInternal 方法,处理跨域配置逻辑。* @param request HttpServletRequest 对象,表示 HTTP 请求。* @param response HttpServletResponse 对象,表示 HTTP 响应。* @param filterChain FilterChain 对象,表示过滤器链。* @throws ServletException 如果发生 Servlet 异常。* @throws IOException 如果发生 I/O 异常。*/@Overrideprotected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {// 设置允许访问的域名为 "http://localhost:8080"response.setHeader("Access-Control-Allow-Origin", "http://localhost:8080");// 允许的请求方法,如 GET、POST、PUT、DELETEresponse.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");// 允许的请求头,如 Content-Typeresponse.setHeader("Access-Control-Allow-Headers", "Content-Type");// 是否允许携带凭证信息(如 Cookie)response.setHeader("Access-Control-Allow-Credentials", "true");// 预检请求的缓存时间,单位为秒。在此时间范围内,浏览器无需再次发起预检请求response.setHeader("Access-Control-Max-Age", "3600");// 继续执行过滤器链filterChain.doFilter(request, response);}
}
  • OncePerRequestFilter: 保证在一次请求中只执行一次过滤的基类。 doFilterInternal:
    重写父类的方法,处理跨域配置逻辑。 response.setHeader(“Access-Control-Allow-Origin”,
    “http://localhost:8080”): 设置允许访问的域名为 “http://localhost:8080”
    response.setHeader(“Access-Control-Allow-Methods”, “GET, POST, PUT,
    DELETE”): 允许的请求方法,如 GET、POST、PUT、DELETE。
    response.setHeader(“Access-Control-Allow-Headers”, “Content-Type”):
    允许的请求头,如 Content-Type。
    response.setHeader(“Access-Control-Allow-Credentials”, “true”):
    是否允许携带凭证信息(如 Cookie)。 response.setHeader(“Access-Control-Max-Age”,
    “3600”): 预检请求的缓存时间,单位为秒。在此时间范围内,浏览器无需再次发起预检请求

2.nginx配置方法
在nginx.conf中稍微添加配置即可:

location / {# 允许跨域的请求,可以自定义变量$http_origin,*表示所有add_header 'Access-Control-Allow-Origin' *;# 允许携带cookie请求add_header 'Access-Control-Allow-Credentials' 'true';# 允许跨域请求的方法:GET,POST,OPTIONS,PUTadd_header 'Access-Control-Allow-Methods' 'GET,POST,OPTIONS,PUT';# 允许请求时携带的头部信息,*表示所有add_header 'Access-Control-Allow-Headers' *;# 允许发送按段获取资源的请求add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';# 一定要有!!!否则Post请求无法进行跨域!# 在发送Post跨域请求前,会以Options方式发送预检请求,服务器接受时才会正式请求if ($request_method = 'OPTIONS') {add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;# 对于Options方式的请求返回204,表示接受跨域请求return 204;}
}

相关文章:

解决跨域问题(SpringBoot)

“什么是跨域?” 跨域 (Cross-Origin) 是指在浏览器的同源策略(Same-Origin Policy)下,一个网页的源(指协议、域名、端口号的组合)与另一个网页的源不同。因此,不同源的…...

LeetCode——2487. 从链表中移除节点

通过万岁!!! 题目:给你一个链表,然后让你从链表中移除一些节点,移除的规则就是我们选择的这个节点在原链表中往右不能有比这个节点大的值。思路:这个题我最开始以为是双指针,然后找…...

云原生和Kubernetes如何简化应用程序开发

在谈论当前技术时,“云计算”正变得非常普遍,作为开发人员,将会继续体验使用云计算应用程序的优势;在云计算中,另一个正在出现的术语是云原生。在进入实际话题之前,首先了解一下云原生到底是什么。 深入了解云原生应用 现在,世界各地的公司都了解云计算应用程序可以带来…...

点云从入门到精通技术详解100篇-基于深度学习的室内场景三维点云语义分割(续)

目录 CSegNet 语义分割模型构建 3.1 引言 3.2 偏移注意机制 3.3 网络主干 3.4 边缘卷积模块...

RabbitMQ消息可靠性保证机制3--消费端ACK机制

消费端ACK机制 ​ 在这之前已经完成了发送端的确认机制。可以保证数据成功的发送到RabbitMQ,以及持久化机制,然尔这依然无法完全保证整个过程的可靠性,因为如果消息被消费过程中业务处理失败了,但是消息却已经被标记为消费了&…...

Copilot在Pycharm的应用和示例

Copilot 是 Github 在 2021 年发布的 AI 代码助手工具,它可以根据你提供的上下文信息,自动生成代码建议,帮助提高代码编写效率和准确性。在 Pycharm 中使用 Copilot,可以进一步提升 Python 开发效率,本文将分享如何在 …...

搜维尔科技:【简报】第九届元宇宙数字人设计大赛,报名已经进入白热化阶段!

随着元宇宙时代的来临,数字人设计成为了创新前沿领域之一。为了提高大学生元宇宙虚拟人角色策划与美术设计的专业核心能力,我们特别举办了这场元宇宙数字人设计赛道,赛道主题为「AI人工智能科技」 ,只要与「AI人工智能科技」相关的…...

性能检测自动化(含内存泄露检测)

一、平台侧实现方案 1、UI case重复执行N次:进入页面,sleep 5s,记录start_time,sleep 30s,记录end_time,性能采集工具全程采集性能数据 2、根据采集到的性能数据,按照N次卡点性能数据:去掉最大的10%、最小的10%,求取平均值,作为单次性能数据结果f(n)…...

iec104和iec61850

iec104和iec61850 IEC104 规约详细解读(一) 协议结构 IEC104 规约详细解读(二)交互流程以及协议解析 61850开发知识总结与分享【1】 Get the necesarry projects next to each other in the same directory; $ git clone https://github.com/robidev/iec61850_open_server.g…...

redis 面试问题 (更新中 ing)

目录 reids 是做什么的为什么那么快有哪些使用场景redis有哪些 数据结构redis 有哪些底层数据结构为什么设计 sds一个 字符串 存储多大容量 stream为什么设计 streamstream 消费者消息丢失stream 消息私信问题 持久化机制redis 持久化机制,优缺点,怎么用…...

力扣(leetcode)第389题找不同(Python)

389.找不同 题目链接:389.找不同 给定两个字符串 s 和 t ,它们只包含小写字母。 字符串 t 由字符串 s 随机重排,然后在随机位置添加一个字母。 请找出在 t 中被添加的字母。 示例 1: 输入:s “abcd”, t “abcde…...

Linux_源码编译安装LAMP

1. 安装httpd服务 在配置 Apache 网站服务之前,需要正确安装好 httpd 服务器软件。httpd 服务器的安装可以选用 RPM 安装、源码编译安装这两种方式,前者相对比较简单、快速,但是在功能上存在一定的局限性。在实际的生产环境中,使…...

静态网页设计——清雅古筝网(HTML+CSS+JavaScript)

前言 声明:该文章只是做技术分享,若侵权请联系我删除。!! 感谢大佬的视频: https://www.bilibili.com/video/BV1T64y1K7Zn/?vd_source5f425e0074a7f92921f53ab87712357b 使用技术:HTMLCSSJS(…...

实战Flink Java api消费kafka实时数据落盘HDFS

文章目录 1 需求分析2 实验过程2.1 启动服务程序2.2 启动kafka生产 3 Java API 开发3.1 依赖3.2 代码部分 4 实验验证STEP1STEP2STEP3 5 时间窗口 1 需求分析 在Java api中,使用flink本地模式,消费kafka主题,并直接将数据存入hdfs中。 flin…...

爬虫与反爬-localStorage指纹(某易某盾滑块指纹检测)(Hook案例)

概述:本文将用于了解爬虫中localStorage的检测原理以及讲述一个用于检测localStorage的反爬虫案例,最后对该参数进行Hook断点定位 目录: 一、LocalStorage 二、爬虫中localStorage的案例(以某盾滑块为例) 三、如何…...

聊一聊 webpack 和 vite 的开发服务代理的问题

webpack 和 vite webpackVite重新编辑的问题 changOrigin: true如何定义 /api ? webPack And Vite 都是两个比较好用的打包工具,尤其是 Vite, 几几年流行忘记了,特色就是服务启动极快,实现预加载,感觉 webPack 要比 Vite 要复杂一…...

【鸿蒙4.0】安装DevEcoStudio

1.下载安装包 HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者华为鸿蒙DevEco Studio是面向全场景的一站式集成开发环境,,在鸿蒙官网下载或升级操作系统开发工具DevEco Studio最新版本,SDK配置和下载,2.1支持Mac、Windows操作系统。…...

[概率论]四小时不挂猴博士

贝叶斯公式是什么 贝叶斯公式是概率论中的一个重要定理,用于计算在已知一些先验信息的情况下,更新对事件发生概率的估计。贝叶斯公式的表达式如下: P(A|B) P(B|A) * P(A) / P(B) 其中,P(A|B)表示在事件B发生的条件下事件A发生的概…...

算法通关村第二十关-黄金挑战图的常见算法

大家好我是苏麟 , 今天聊聊图的常见算法 . 图里的算法是很多的,这里我们介绍一些常见的图算法。这些算法一般都比较复杂,我们这里介绍这些算法的基本含义,适合面试的时候装*,如果手写,那就不用啦。 图分析算法&#xf…...

服务器内存不足怎么办?会有什么影响?

服务器内存,也被称为RAM(Random Access Memory),是一种临时存储设备,用于临时存放正在运行的程序和数据。它是服务器上的超高速存储介质,可以快速读取和写入数据,提供给CPU进行实时计算和操作。…...

GPT实战系列-简单聊聊LangChain

GPT实战系列-简单聊聊LangChain LLM大模型相关文章: GPT实战系列-ChatGLM3本地部署CUDA111080Ti显卡24G实战方案 GPT实战系列-Baichuan2本地化部署实战方案 GPT实战系列-大话LLM大模型训练 GPT实战系列-探究GPT等大模型的文本生成 GPT实战系列-Baichuan2等大模…...

【读书笔记】《白帽子讲web安全》浏览器安全

目录 第二篇 客户端脚本安全 第2章 浏览器安全 2.1同源策略 2.2浏览器沙箱 2.3恶意网址拦截 2.4高速发展的浏览器安全 第二篇 客户端脚本安全 第2章 浏览器安全 近年来随着互联网的发展,人们发现浏览器才是互联网最大的入口,绝大多数用户使用互联…...

海外服务器2核2G/4G/8G和4核8G配置16M公网带宽优惠价格表

腾讯云海外服务器租用优惠价格表,2核2G10M带宽、2核4G12M、2核8G14M、4核8G16M配置可选,可以选择Linux操作系统或Linux系统,相比较Linux服务器价格要更优惠一些,腾讯云服务器网txyfwq.com分享腾讯云国外服务器租用配置报价&#x…...

Linux 编译安装 Nginx

目录 一、前言二、四种安装方式介绍三、本文安装方式:源码安装3.1、安装依赖库3.2、开始安装 Nginx3.3、Nginx 相关操作3.4、把 Nginx 注册成系统服务 四、结尾 一、前言 Nginx 是一款轻量级的 Web 服务器、[反向代理]服务器,由于它的内存占用少&#xf…...

Oracle文件自动“减肥”记

📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜&am…...

【csharp】抽象类与接口有哪些不同?什么时候应该使用抽象类?

抽象类与接口有哪些不同? 抽象类和接口是在面向对象编程中两个不同的概念,它们有一些重要的区别。以下是抽象类和接口的主要不同点: 抽象类(Abstract Class): 成员类型: 抽象类可以包含抽象方…...

最新-mybatis-plus 3.5分页插件配置

mybatis-plus 3.5分页插件配置 前提 1.项目不是springboot, 是以前的常规spring项目 2.mp 从3.2升级到3.5,升级后发现原本的分页竟然不起作用了,每次查询都是查出所有 前后配置对比 jar包对比 jsqlparser我这里单独引了包,因为版本太低…...

案例098:基于微信小程序的电子购物系统的设计与实现

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…...

亚信安慧AntDB数据库:数字化时代的数据库创新引领者

AntDB数据库以其卓越的创新能力,集中体现在融合统一与实时处理两大关键领域。作为一款服务全国超过10亿用户的分布式数据库,其独特之处在于长期积累的经验、多样性的支持能力、快速响应的数据处理速度以及卓越的系统稳定性。AntDB不仅仅是一个数据库系统…...

【MySQL】关于日期转换的方法

力扣题 1、题目地址 1853. 转换日期格式 2、模拟表 表: Days Column NameTypedaydate day 是这个表的主键。 3、要求 给定一个Days表,请你编写SQL查询语句,将Days表中的每一个日期转化为"day_name, month_name day, year"格式的字符串…...

简约网站设计/什么是网络营销

被测试的简单函数源文件位于 /klee_src/examples/get_sign 目录下 该源代码分为三个部分 第一个部分为被测试的函数 int get_sign(int x) {if (x 0)return 0;if (x < 0)return -1;elsereturn 1; } 第二个部分为主函数 int main() {int a;klee_make_symbolic(&a, size…...

网站建设的相关问题/营业推广的概念

if (existing ! null) { // 若 existing 不为 null&#xff0c;则忽略该调用。对应方法注释的第 12 点。 return; } // 将 owner 和 observer 的包装对象添加到 owner.getLifecycle()。对应方法注释的第 1 点。 owner.getLifecycle().addObserver(wrapper); } 第一个问题…...

做网站公司好做吗/免费网站在线客服系统源码

有时候在初始化shell脚本中希望能顺便创建用户并指定密码&#xff0c;使用useradd命令可以达到该效果:useradd -m -p encryptedPassword username参数说明:-m : 自动建立用户的登入目录&#xff1b;-p encryptedPassword : 加密后的密码, 方法crypt()的返回值.username 需要添加…...

dw做网站有哪些用处/武汉网站推广公司

早就看过这篇文章&#xff0c;觉得还可以&#xff0c;今天稍加整理后传上来了。原文来自http://www.huihoo.com/gnu/c_study_doc.html。 /Files/froster/C语言概述.rar 转载于:https://www.cnblogs.com/froster/archive/2005/04/01/130085.html...

西宁软件优化网站建设/厦门谷歌seo

BCP(DataBase connection pool),数据库连接池。是 apache 上的一个 java 连接池项目&#xff0c;也是 tomcat 使用的连接池组件。单独使用dbcp需要2个包&#xff1a;commons-dbcp.jar,commons-pool.jar由于建立数据库连接是一个非常耗时耗资源的行为&#xff0c;所以通过连接池…...

做豆制品的网站/网站推广要点

snapdrive中&#xff0c;iSCSI Managerment的配置。 参考链接&#xff1a; https://technet.microsoft.com/zh-tw/library/dn308559.aspx 本文转自daniel8294 51CTO博客&#xff0c;原文链接&#xff1a;http://blog.51cto.com/acadia627/1899699&#xff0c;如需转载请自行联系…...