首页 > 其他分享 >解决CORS错误(Spring Boot)

解决CORS错误(Spring Boot)

时间:2024-03-19 10:22:37浏览次数:15  
标签:http 跨域 Spring Boot 域名 头部 CORS 请求

前言
跨域(Cross-Origin)是指在Web开发中,当一个Web应用试图从一个源(域名、协议、端口组合)获取资源时,该请求的目标与当前页面的源不同。具体来说,当一个页面的JavaScript代码尝试向不同域名、协议或端口的服务器发送请求时,就会发生跨域请求。

跨域请求是由浏览器实施的同源策略(Same-Origin Policy)限制导致的。同源策略是浏览器的一项安全机制,旨在保护用户的隐私和安全。同源策略要求Web页面只能从相同源加载资源,不同源的页面不能访问彼此的数据,以防止恶意网站获取用户的敏感信息。

跨域请求通常发生在以下情况下:

不同域名之间的请求: 例如,前端应用部署在http://example.com,而后端API服务部署在http://api.example.com。
不同子域之间的请求: 例如,前端应用部署在http://www.example.com,而后端API服务部署在http://api.example.com。
不同协议之间的请求: 例如,前端应用部署在https://example.com,而后端API服务部署在http://api.example.com。
什么是CORS错误?
CORS是浏览器实现的一种安全机制,用于控制在客户端脚本中发起的跨源HTTP请求。当浏览器发现一个跨域请求时,它会检查请求目标的响应中是否包含特定的CORS头部。如果缺少这些头部或者头部中的信息不符合要求,浏览器就会拒绝该请求,并报告CORS错误。

为什么会出现CORS错误?
CORS错误通常由以下原因导致:

缺少或不正确的CORS响应头部: 服务器未正确配置CORS响应头部,导致浏览器拒绝跨域请求。
浏览器同源策略: 浏览器的同源策略限制了在不同源(域名、协议、端口)之间的数据交换,跨域请求需要特殊的权限设置。
如何解决CORS错误?
要解决CORS错误,需要在服务器端进行配置。以下是常见的解决方法:

在服务器端设置正确的CORS响应头部:
允许特定域名访问资源:设置Access-Control-Allow-Origin头部。
允许特定HTTP方法:设置Access-Control-Allow-Methods头部。
允许特定HTTP头部:设置Access-Control-Allow-Headers头部。
允许发送Cookie:设置Access-Control-Allow-Credentials头部。
允许客户端访问自定义响应头部:设置Access-Control-Expose-Headers头部。
使用Spring Boot等后端框架提供的CORS配置功能:
在Spring Boot中,可以通过添加配置类或者拦截器来实现CORS配置,具体方法请参考官方文档或者相关教程。
Spring Boot提供了方便的CORS配置功能,通过添加配置类或者拦截器来实现CORS配置,以允许跨域请求。

首先,创建一个名为CorsConfig的Java类,用于配置CORS。这个类需要实现WebMvcConfigurer接口,并重写addCorsMappings方法。

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class CorsConfig implements WebMvcConfigurer {

@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost") // 允许来自http://localhost的请求
.allowedMethods("GET", "POST", "PUT", "DELETE") // 允许的HTTP方法
.allowedHeaders("*"); // 允许的HTTP头部
}
}

复制这段代码即可解决问题

在这个配置类中,通过allowedOrigins方法指定允许访问资源的域名,可以是单个域名、多个域名,或者使用通配符*表示允许任意域名访问。通过allowedMethods方法指定允许的HTTP方法,以及通过allowedHeaders方法指定允许的HTTP头部。你可以根据自己的需求进行修改。

这样配置完成后,当前端应用通过http://localhost访问后端服务时,就不会再出现CORS错误了。后端服务会正确地响应跨域请求,提供资源访问权限。

请确保这个CorsConfig类能够被Spring Boot扫描到,通常放置在与启动类(如Application类)相同的包或其子包下。这样Spring Boot启动时就会加载这个配置类,并应用其中的CORS配置。
————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/qq_72935001/article/details/136072623

标签:http,跨域,Spring,Boot,域名,头部,CORS,请求
From: https://www.cnblogs.com/telwanggs/p/18082138

相关文章

  • SpringBoot集成MybatisPlus
    创建一个基于SpringBoot集成MybatisPlus的示例项目是一个相对直接且实用的过程,它结合了SpringBoot的自动配置特性与MybatisPlus的增强功能,使得数据库操作变得更为简便和高效。下面是一个简单的步骤说明和代码示例,帮助你快速搭建一个SpringBoot集成MybatisPlus的Demo项......
  • JAVA实战开源项目:农村物流配送系统(Vue+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块2.1系统登录、注册界面2.2系统功能2.2.1快递信息管理:2.2.2位置信息管理:2.2.3配送人员分配:2.2.4路线规划:2.2.5个人中心:2.2.6退换快递处理:2.2.7客户评价:三、系统展示四、核心代码4.1查询商家4.2退换快递4......
  • JAVA实战开源项目:城市桥梁道路管理系统(Vue+SpringBoot)
    目录一、摘要1.1项目介绍1.2项目录屏二、功能模块三、系统展示四、核心代码4.1查询城市桥梁4.2新增城市桥梁4.3编辑城市桥梁4.4删除城市桥梁4.5查询单个城市桥梁五、免责说明一、摘要1.1项目介绍基于Vue+SpringBoot+MySQL的城市桥梁道路管理系统,支持管......
  • Java_EE企业级开发学习笔记——spring学习笔记第一章
    记录笔记。一.Spring介绍Spring是以IOC(控制反转)和AOP(面向切面编程)为内核的一个轻量级开源框架。二.Spring框架的优点1.非侵入设计使得应用程序对框架的依赖最小化。2.方便解耦对象的创建和依赖关系的维护都由Spring容器管理。......
  • spring boot企业级开发教程学习笔记——第一章
    记录笔记。一.spring和springboot简介Springboot之前是spring,Spring是一个轻量开源框架,通过控制反转(IOC)和面向切面编程(AOP)取代了低效臃肿的开发模式。但是spring需要配置各种XML配置文件,只有少量的注解。springboot框架本身并不提供Sprng框架的核心特性以......
  • 基于springboot的xxx股份有限公司进销存系统
    一、项目介绍  使用旧方法对福泰轴承股份有限公司进销存系统的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在福泰轴承股份有限公司进销存系统的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开......
  • Spring高级特性@Enable*注解的应用之:计划任务和多线程
     Spring高级特性之三:@Enable*注解的工作原理和@Enable*注解的应用之:声明式事务@EnableTransactionManagement详解中对于@EnableXXX相关应用已有总结:1)@EnableXXX启动XXX应用,比如@EnableTransactionManagement开启声明式事务管理, 2)具体被操作管理执行对象使用注解@......
  • SpringWeb
    文章目录SpringWeb概述特点运行流程组件SpringWeb搭建接收数据获取请求数据四种方法返回json中文乱码处理拦截器SpringWeb概述SpringWeb是Spring框架中的一部分,是对java后端web层进行了封装,和Spring框架可以无缝对接,是基于ServletAPI的实现。特点与IOC容器等无......
  • springboot集成redis
    1.导入spring-boot-starter-data-redis起步依赖2.在配置文件中,配置redis连接信息3.调用API(StringRedisTemplate)完成字符串的存取操作```//把token存储在redis中ValueOperations<String,String>operations=stringRedisTemplate.opsForValue();operations.set(token......
  • Java毕业设计 基于springboot vue招聘网站 招聘系统
    Java毕业设计基于springbootvue招聘网站招聘系统springbootvue招聘网站招聘系统功能介绍用户:登录个人信息简历信息查看招聘信息企业:登录企业信息管理发布招聘信息职位招聘信息管理简历信息管理管理员:注册登录管理员管理用户管理企业管理简历信息管理......