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

SpringMVC跨域问题解决方案

当Web应用程序尝试从一个源(例如 http://localhost:9090)向另一个不同的源(例如 http://localhost:8080)发起请求时,发现报错:
在这里插入图片描述
在这里插入图片描述

报错原因:请求被CORS策略拦截了

跨域问题概述
当Web应用程序尝试从一个源(例如 http://localhost:9090)向另一个不同的源(例如 http://localhost:8080)发起请求时,如果这两个源的协议、域名或端口有任何不同,则这种请求被视为跨域请求。浏览器为了安全考虑,会默认阻止这样的请求,除非服务器明确允许。

在之前的项目中,由于前后端代码部署在同一服务下,使用相同的端口号,因此没有遇到跨域问题。然而,在当前的前后端分离架构中,前端运行在一个独立的服务上(如端口9090),而后端API则运行在另一个服务上(如端口8080)。这导致了跨域访问的问题。
SSM 结构中的跨域处理
SSM(Spring + Spring MVC + MyBatis)结构中,Spring MVC框架默认遵循同源策略,不允许跨域请求以增强安全性。这意味着,除非特别配置,否则来自外部的请求将被拒绝。例如,当你正在浏览某个网站时,如果该网站试图向你的银行网站发送请求,这种行为通常会被禁止,除非银行网站明确指定了允许的条件和授权。
解决方案
为了解决跨域问题,可以在后端添加CORS支持,允许特定的来源访问资源。以下是在Spring MVC中启用CORS的一种方法:

  • 创建配置类:在项目的config包内创建一个新的Java类,命名为WebConfig。
  • 编写CORS配置:在WebConfig类中定义一个方法来设置CORS规则,并将其注册到Spring MVC中。
package cn.tedu.ivos.base.config;

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

/**
 * 跨域处理配置类
 * @version 1.0
 * @date 2024-11-29
 */
@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedHeaders("*")
                .allowedMethods("*")
                .allowedOriginPatterns("*")
                .allowCredentials(true)
                .maxAge(3600);
    }
}

  • 重启后端工程:保存更改并重启后端应用,确保新的CORS配置生效。

通过上述步骤,你能够为特定的来源(在这个例子中是http://localhost:9090)开启跨域资源共享,从而解决前端与后端之间因端口不同而导致的跨域问题。


http://www.kler.cn/a/415454.html

相关文章:

  • 3.22【计组】 流水线加法器
  • VUE3中defineExpose的使用方法
  • 命令行应用开发入门指南:从脚手架搭建到UI库与交互增强
  • 【C/C++】内存管理详解:从new/delete到智能指针的全面解析
  • 什么是串联谐振
  • 多线服务器和BGP服务器有什么区别
  • BUUCTF—Reverse—GXYCTF2019-luck_guy(9)
  • 003 MATLAB基础计算
  • Cesium 当前位置矩阵的获取
  • 深入探索 Java 中的 Spring 框架
  • ORACLE之DBA常用数据库查询
  • openGauss你计算的表大小,有包含toast表么?
  • ArcGIS pro中的回归分析浅析(加更)关于广义线性回归工具的补充内容
  • 2.安装docker、docker compose
  • 使用Native AOT发布C# dll 提供给C++调用
  • c++趣味编程玩转物联网:树莓派Pico控制 LED点阵屏
  • 11.25.2024刷华为OD
  • 【动态规划】完全背包问题应用
  • 淘宝Vision Pro:革新购物体验的沉浸式未来
  • QML 之 画布元素学习
  • 51单片机从入门到精通:理论与实践指南常用资源篇(五)
  • 提升数据分析效率:Excel Power Query和Power Pivot的妙用
  • 获取字 short WORD 上指定的位是否有效
  • Stability AI最新一代图像生成模型stable-diffusion-3.5-large分享
  • 力扣题库Day4(持续更新中...)
  • AutoGLM的一小步,人机交互进化的一大步